ぱっと見て「ヘタだなぁ」と思うコード その6at TECH
ぱっと見て「ヘタだなぁ」と思うコード その6 - 暇つぶし2ch1:デフォルトの名無しさん
07/10/25 03:35:55
禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名

過去スレ
その5: スレリンク(tech板)
その4: スレリンク(tech板)
その3: スレリンク(tech板)
その2: スレリンク(tech板)
初代 : スレリンク(tech板)

2:デフォルトの名無しさん
07/10/25 03:50:58
余裕の2GET


3:デフォルトの名無しさん
07/10/25 03:52:31
そして、1乙。

4:デフォルトの名無しさん
07/10/25 08:59:17
アホが群がって自分の趣味をぶつけ合うだけの糞スレイラネ

5:デフォルトの名無しさん
07/10/25 10:48:00
>>1
左定数も禁止ネタに入れとけよ

6:デフォルトの名無しさん
07/10/25 10:50:46
if(0 == a)
はでメリットがない上に明確なメリットがある以上
やらない奴は低能。

7:デフォルトの名無しさん
07/10/25 10:56:03
>>6 シンプルかつ充分な燃料おつw

8:デフォルトの名無しさん
07/10/25 10:57:01
・memset
・malloc - free

の禁止ネタって何だ?

9:デフォルトの名無しさん
07/10/25 12:32:55
KENT-WEBのスクリプト全般

10:デフォルトの名無しさん
07/10/25 15:27:37
if( a == 0 ){}

if( 0 == a ){}
では、同じコードになる保証は何処にもない

判りやすく、C++で解説するならば
前者は
if ( a.operator==( 0 ) ){} // オブジェクトaの==メソッドの呼び出し
であり
後者は、
if ( operator==( 0, a ) ){} // グローバルな==関数の呼び出し
となるからである


11:デフォルトの名無しさん
07/10/25 15:29:07
ヘタな実装前提にして叩くなよw

12:デフォルトの名無しさん
07/10/25 15:43:23
バカか
>>10は左定数擁護派だ

13:デフォルトの名無しさん
07/10/25 16:53:26
>>8
> ・memset

char* p = malloc(1024);
memset(p, 0x00, 1024);
とするのは是か非かという話題。
・必要ないのになんでヌルクリアするの?派
・したってそれほど実害ないじゃん派
の二派に分かれる。
[私見] 前者が妥当

> ・malloc - free
main()が終了する前に、free()は必要なのかという話題。
・自分でmalloc()したんだから、free()するのは当然派
・OSが回収する資源だからしなくても良い。free()が難しいデータ構造だってあるじゃん派
過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
[私見] 後者が妥当


14:デフォルトの名無しさん
07/10/25 17:51:51
>>13
> 過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
ありがとううう!! そういう具体的な情報は嬉しいね。

俺の私見:
char *pの事前のmemsetは不要なのでしない。
(ただしcalloc(1, sizeof(hoge));は多用する)
main終了前のfreeは不要なのでしない。

↑禁止ネタにこういうレスしたらダメでしょうか?わかりません><

15:デフォルトの名無しさん
07/10/25 17:53:02
決め付けたら、余計荒れるだろ

16:デフォルトの名無しさん
07/10/25 18:13:18
暗黙の宣言は利用しないと言う原則から行けば
memsetはした方がいいし、できる限りfreeする方がいいだろう

しかし、定数は右に置くべきだろう


17:デフォルトの名無しさん
07/10/25 18:18:45
何かやっておきたいのならchar *p;*p = '\0';で充分では。

18:デフォルトの名無しさん
07/10/25 18:20:58
char *p = malloc(size);*p = '\0';な。突っ込まれるまえに。

19:デフォルトの名無しさん
07/10/25 18:25:06
>>18
その書き方なんか気持ち悪いんだけど...

char *p = malloc(size);
strcpy(p, "");

の方が好き


20:デフォルトの名無しさん
07/10/25 18:45:30
スルー力が試される昨今、みなさんいかがお過ごしですか

21:デフォルトの名無しさん
07/10/25 18:57:23
スルーするくらいなら居ないほうがマシだぞ

22:デフォルトの名無しさん
07/10/25 19:54:22
>>20
スルー力って、新種のイカかと思った

23:デフォルトの名無しさん
07/10/25 20:10:27
>>22
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'

【結果発表】
パッ   パッ   パッ    パッ   パッ    パッ
 [チラ]  [シの]  [裏に]  [書き]  [やが]  [れ!]
  ∥∧,,∧ ∥∧,,∧ ∥∧,,∧ ∥∧,,∧ ∥∧,,∧ ∥∧,,∧
  ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`)
   (    ). (    ). (    ) (    ) (    ) (    )
   `u-u´  `u-u´   `u-u´  `u-u´  `u-u´  `u-u

24:デフォルトの名無しさん
07/10/25 20:12:56
>>23
お前がな!
(顔ズレてるじゃんよ)

25:デフォルトの名無しさん
07/10/25 20:24:26
悪くないスレの出だしだ。

26:デフォルトの名無しさん
07/10/25 20:44:10
Win32APIの糞でかい構造体の全てのフィールドにいちいち0だの'\0'だのを突っ込んでる奴はマゾ

27:デフォルトの名無しさん
07/10/25 21:25:46
ダメだ、我慢ができないw

>>19
無駄な関数呼び出しをして、処理速度を遅くしたい人ですね?

コンパイラの最適化で*p='\0';と同じコードを吐いてくれるようになるのかな??


28:デフォルトの名無しさん
07/10/25 21:29:24
>>13
> 過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
fj.lang.cの時は、プロセス終了時にmallocで確保したメモリを開放しない(できない)OSもあるから、main()終了直前でもfreeしたほうがいい、って結論だった記憶が。
今でもwindowsだと信用ができない。


29:デフォルトの名無しさん
07/10/25 21:37:48
そんなOSあっていいの?w 特殊な環境?

30:デフォルトの名無しさん
07/10/25 21:49:26
>>28
fjで結論なんて出るわけないだろ。



31:デフォルトの名無しさん
07/10/25 22:31:57
>>27
いや、*p='\0';だと、馬鹿な奴が、*p="Init Strings";とかやってくれそうで...


32:デフォルトの名無しさん
07/10/26 00:15:42
char month[] = "Jan\0Feb\0Mar\0…Dec\0";

Decの後の\についてはスルーするとして、こういうのってどうよ

33:デフォルトの名無しさん
07/10/26 00:18:17
>>32
埋め込むなら、
char *month[] = {"Jan", "Feb", ・・・, "Dec"};
でいいじゃねえかと言いたくなります。

34:デフォルトの名無しさん
07/10/26 00:48:36
>>31
それ、後者はコンパイル通らないよ。

35:デフォルトの名無しさん
07/10/26 01:40:17
>>29
仮想記憶の無いOSもある
ex.DOS
ex.ITRON
アプリケーションが死ぬ時にOSも道連れなら別にかまわんが、違うだろう?

36:デフォルトの名無しさん
07/10/26 01:48:40
つーか最近の若いもんはそんなことも知らないんだな。

37:デフォルトの名無しさん
07/10/26 01:56:53
>>34
そういうばか者は、要らない工夫をするから怖いよ~♪
しなくていい工夫はするのに、しなきゃいけない工夫をしないんだ...orz

38:デフォルトの名無しさん
07/10/26 02:01:32
>>37
コーディング規約でいくら縛っても縛っても、とんでもないコード書いてくるよな。
逆に言えば、コーディング規約でどうにかなる程度の問題なんて、初めからどうでも良い。
つまり、コーディングスタイルなんて、どうだっていいって事だな。
縛ろうと思えば、いつでも縛れるんだから。

39:デフォルトの名無しさん
07/10/26 02:17:01
>>38
>縛ろうと思えば、いつでも縛れるんだから。

いつでも縛れるからといっても、単体試験も終わろうかという時にコーディング規約を
変更するのは無しだろ、、、

40:デフォルトの名無しさん
07/10/26 02:17:06
だから、いくら人手不足とはいえ、使えないカスはプロジェクトから追い出したほうがいいんだよね。


41:デフォルトの名無しさん
07/10/26 02:29:11
>>39
そりゃ途中で変更は出来んだろうな。
だけど、コーディングスタイルは縛ろうと思えば縛れるんだから、全然いいんだよ。
むしろ問題は、どうやっても縛ることのできない、糞コードの方。
網の目をかいくぐるように余計なことをする。

42:デフォルトの名無しさん
07/10/26 02:54:10
strcpyで初期化すれば、NULL以外で初期化しなければならなくなったときに、最小限の変更で済むし
自分以外がその変更をする場合でも恐らく大丈夫だろうと思われる
*p = '\0';では、>>31みたいな変更をされた挙げ句、>>37な奴で、結果mallocした領域を駄目になって謎のエラーに悩むはめに...

猫の手を借りるためには、猫に理解できるコードを書かなければならない...orz


43:デフォルトの名無しさん
07/10/26 03:10:13
猫用マクロセットが必要だな

44:デフォルトの名無しさん
07/10/26 10:35:48
>>42
NULLと'\0'(NUL)は違うっていうのはわかってるよね?

いちよう。

45:デフォルトの名無しさん
07/10/26 10:36:48
コーディングスタイルにこだわらない奴は、下手

46:デフォルトの名無しさん
07/10/26 14:09:32
>>44
たぶん、判ってるよぅ(^-^;

NULLは、ナルっとしてて
NULは、ヌルっとしてるんだよね!

*p = '\0';にしてんじゃん...
判ってなきゃ、*p = NULL;にするし...

47:デフォルトの名無しさん
07/10/26 14:21:33
ひとりだけ、超絶低レベルな奴が紛れ込んでる

48:デフォルトの名無しさん
07/10/26 14:23:11
>>19
いくらなんでも、それは無い

49:デフォルトの名無しさん
07/10/26 14:24:03
ストリコンペ!

50:デフォルトの名無しさん
07/10/26 15:12:13
今来た。
もう終わったけど、if (定数 == 変数)の話がC FAQに載ってることに誰も言及しなかったのが不思議。
三田テンゲンは、C FAQから持ってきたか、comp.lang.cをwatchしてたかのどっちかじゃないかな。

51:デフォルトの名無しさん
07/10/26 15:14:27
こんなところで必死に10年前のネタ戦わせてる奴はもっと充実した趣味を探せといいたいね。
何もないならWiiFitでも買ってたるんだ腹でも引っ込めたらどうだw

52:デフォルトの名無しさん
07/10/26 15:19:05
if (定数 == 変数)はいろんな本に載ってるぞ

53:デフォルトの名無しさん
07/10/26 15:47:54
その本は買うべきじゃないという、良い指針になる

54:デフォルトの名無しさん
07/10/26 15:48:56
Wiiはありえない

55:デフォルトの名無しさん
07/10/26 15:49:06
良い本かどうかを見分けるのは実に簡単。
ASSERTの説明が入っているかどうか。

56:デフォルトの名無しさん
07/10/26 15:58:14
ASSERTの説明がなくても良い本はあるだろ、常考

57:デフォルトの名無しさん
07/10/26 16:01:21
代入防止に使うと言うのは、変数同士だと意味がなくなるので、==で比較する癖をつけることが望ましい

変数を何と比較しているのか判りやすくするってのは、当該関数の中で、その定数が比較対照になることは決まりきっているので、態々定数を先に持ってくる意味はない
当該関数で、比較に用いられる定数がなんなのか判りにくいのであれば、それは、関数が適切に作られてはいないことを意味するのでは無いだろうか?
また、どうしても定数を最初に出さなければ何を調べてるのか判らないような場合は、if文ではなく、switch文を使用する方が適切なのではないだろうか?


58:デフォルトの名無しさん
07/10/26 16:07:25
え、まだやる気?

59:デフォルトの名無しさん
07/10/26 16:09:10
まあ大盛況だからなww

60:デフォルトの名無しさん
07/10/26 16:22:45
>>57
だからクビになるんだよ
はやく次の仕事見つけろよ

61:デフォルトの名無しさん
07/10/26 16:36:06
>>60
自己紹介乙!

62:デフォルトの名無しさん
07/10/26 17:44:27
> 代入防止に使うと言うのは、変数同士だと意味がなくなるので、==で比較する癖をつけることが望ましい

これの意味がさっぱり分からない…。何の話をしようとしているのかさえ分からない。

63:デフォルトの名無しさん
07/10/26 18:03:48
代入防止ってのは if(a=1) とかの事だろ
ほんとは if(a==1) と判定したかった
でも if(1=a) こうすればコンパイル時に忘れてても分かる

ところが変数同士の比較 if(b=a) はどうしようも無い
というお話

64:デフォルトの名無しさん
07/10/26 18:08:23
(定数左にする癖をつけるよりは)==で比較する癖をつけることが望ましい

ってこと? し、しかし比較は癖も何も==なわけで。

> ところが変数同士の比較 if(b=a) はどうしようも無い

そんなのは既出どころかスタート地点であって、その上で、
「せめて定数の場合の代入だけは検出できるようにしよう」
ってのが定数左派の主張では?
いつも役に立つ、ではなくて、役に立つ場合があるから左に書く、と。

65:デフォルトの名無しさん
07/10/26 18:10:11
というより、

> ところが変数同士の比較 if(b=a) はどうしようも無い

これは、そもそも左も右もねぇ!

66:デフォルトの名無しさん
07/10/26 18:13:30
てかこのレヴェルのバグを防ぐのに四苦八苦してる奴って何やってる人?

67:デフォルトの名無しさん
07/10/26 18:35:13
左へ受け流す~

68:デフォルトの名無しさん
07/10/26 19:51:18
左定数は、==を=と記述ミスした場合に検出できる利点あり。
右定数が左定数より優れている点って何?

69:デフォルトの名無しさん
07/10/26 19:52:16
operator のオーバライドが中途半端なときに死ねる

70:デフォルトの名無しさん
07/10/26 19:56:28
URLリンク(www.st.rim.or.jp)

71:デフォルトの名無しさん
07/10/26 20:01:38
>>68
警告でるから、その利点いらね。

72:デフォルトの名無しさん
07/10/26 20:11:59
google code search でググってみると.。

"== NULL" lang:c    約1,240,000件

"NULL == " lang:c   約56,800件

特に利点もないのに、圧倒的少数派のスタイルを選んでる時点でヘタクソ臭が。


73:デフォルトの名無しさん
07/10/26 20:21:45
>>50
C FAQに載っているけど、それは定数左置きにダメ出ししているってことを理解できてるか?


74:デフォルトの名無しさん
07/10/26 20:25:53
>>72
デブ専、ブス専、フケ専、ハゲ専なんかと同じ人種なんだろう。

自分の感覚が世間とずれていることを認めたがらない。


75:デフォルトの名無しさん
07/10/26 21:55:50
雀の涙ほどのどうでもいいメモリを節約するために
テンポラリ用の奇怪な共用体を使い回したりダミーデータの隙間を拝借したりするような奴にはどう言ってやればいいと思いますか
メモリ節約すること自体は大切だし

76:デフォルトの名無しさん
07/10/26 21:58:14
そんなしょぼい省メモリ化と可読性、開発効率とのトレードオフは成立しないといってやれ。

77:デフォルトの名無しさん
07/10/26 22:16:11
配列とかで大量にデータを取ったりしてるわけじゃなくて、タダの作業用のローカル変数とか
引数をshortにしてるコードとかもあるな。
よっぽど気をつけてコードを書かないと、すぐintへ変換するコードがはいるから、それで、節約した
2バイトなんて簡単にとぶ。
アライメントの問題もあるな。

78:デフォルトの名無しさん
07/10/26 22:16:18
いつも他人のコードを見ては『このコードだと遅い』とか文句つけるジジイと一緒だな
そのくせプロファイラの使い方すら判らないとか

79:デフォルトの名無しさん
07/10/26 22:39:36
入力がshortの範囲なら引数の型をshortにするのは普通じゃね?
数バイトでも節約したいとか実行速度がシビアだったりしなければ。


80:デフォルトの名無しさん
07/10/26 22:43:44
>>72
"== NULL"
"NULL =="
こんなの多数決で考える頭はもうちょっと働かせたほうがよい

if(変数 = NULL)

が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
難しい正規表現でも作る?`NULL'以外の場合もあるよ。

それより定数を左辺にもってくる方法を身につければいいだけじゃない?

自分がグループリーダーになったとき、部下のミスを見つけられるレベルになれる?

これはただの忠告。>>72はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
プログラミングの先生だって×は出さないだろうしなw

81:デフォルトの名無しさん
07/10/26 22:45:53
>>80
ええ? そのバグを防ぐ方法を知らないの?
こういう話のときには必ずでるのに。。。
基礎の基礎だよ。

82:デフォルトの名無しさん
07/10/26 22:49:59
>>80
そんなもんコードチェッカーにかければすぐ見つかるだろ。
まさかコードチェッカー使ってないのか?

83:デフォルトの名無しさん
07/10/26 22:50:11
Pythonを使えばよい

84:デフォルトの名無しさん
07/10/26 22:53:50
>>82
フツーに警告出ないようにコードを書いてるだけで防げるな。
警告出さないようなコンパイラはコードチェッカを使うか、捨てるべきか、悩むこところ。

85:デフォルトの名無しさん
07/10/26 22:57:32
>>80
> こんなの多数決で考える頭はもうちょっと働かせたほうがよい 

コーディングスタイルなんて、よっぽどのセンスと見識があるやつ以外は、自分で考えたりしないで、
一般的なものに従うほうがいいよ。
(どうしてそういうスタイルになっているか、それ以外ではいけないか、考察したりするのは勉強になるけど)

86:デフォルトの名無しさん
07/10/26 22:59:39
てか、=と==を間違うや奴って、そんなに多いのか?

> これはただの忠告。>>80はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
> プログラミングの先生だって×は出さないだろうしなw

しかし、これは真実w

>>79
実行速度なら、shortよりintの方が有利のはず。


87:デフォルトの名無しさん
07/10/26 23:01:09
>>80
警告を無視する習慣があることはよく分かった
その悪習を直すほうがよっぽどいいよ

88:79
07/10/26 23:06:04
>>86
>実行速度なら、shortよりintの方が有利のはず。

だからそう書いてるだろ。よく嫁。


89:80
07/10/26 23:26:14
ごもっとも。ちなみに、コードチェッカー自体忘れてたよw

ちなみに、ウチ(60人ぐらいかな?)にはコードチェッカーを使う人は滅多にいない。
先人の知恵を借りれば、文字間違いのエラーぐらいしか出てこないし、そんなのはコンパイルエラーで出てくるから。

コードチェッカーに頼る前にコーディングスタイルに気を配る方がよっぽどよいよ。
その方が、コードレビューやバージョン管理に割く時間が増えるからね。

もっとも、バージョン管理はCVSで一瞬で済んでしまうが

90:80
07/10/26 23:28:40
>>87
は?警告は全部潰してますが。
どこを縦読みした?wwwww

91:デフォルトの名無しさん
07/10/26 23:29:00
> 数バイトでも節約したいとか実行速度がシビアだったりしなければ。
ん?
「数バイトでも節約したい」とか「実装速度がシビアだったりしなければ」{shortを使う}って読ませたいのか?
(「数バイトでも節約したい」とか「実装速度がシビアだったり」)「しなければ」{int}って読めるぞ。
人のことを言う前に、ちゃんとした分かりやすい日本語を書け。
設計書や資料を作るときの基本だろ?


92:デフォルトの名無しさん
07/10/26 23:30:17 BE:263040825-2BP(125)
gcc (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)で
#include <stdio.h>

int main(int argc, char *argv[]){
 int a = 2;

 if(a = 1)
  printf("%s\n", argv[0]);
return 0;
}

というプログラムを-Wall付きでコンパイルしてみたら、
test.c:6: 警告: 真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします
という警告が出た。まあこれで何か起こってることはわかるだろう。

93:デフォルトの名無しさん
07/10/26 23:30:23
80はどこの社員だ?
そこだけには仕事は頼まないようにするから、教えてくれ。


94:デフォルトの名無しさん
07/10/26 23:31:00
制御文の代入で警告でないってどこのコンパイラ使ってるの?

95:デフォルトの名無しさん
07/10/26 23:32:41
>>89
アホなコンパイラ使ってるなら、せめてlintとか使えよ。
こわー。



96:デフォルトの名無しさん
07/10/26 23:33:07
「プログラミングの先生」とか言っちゃってる時点で、学生確定

97:79
07/10/26 23:38:15
>>91
・普通はshortを使う。
・数バイトでも節約したい場合は>>77のようにintを使った方がよい場合もある。
・実行速度がシビアならintを使った方がよい。

という意味のつもりで書いたが分かりにくかったか。


98:デフォルトの名無しさん
07/10/26 23:40:01
>>80
> が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
最悪、ホワイトボックスの分岐網羅カバレッジ100%のテスト段階で見つかるわけだが。
それより早く見つかったほうがコストが安いから、どうしようという話。
で、ちゃんとしたコンパイラかlint使えって結論。

99:80
07/10/26 23:41:10
>>92
何のデモか知らないけど、わざわざ-Wallで例示するなんてヒマなんだね。

>>93
いや、もう遅いかもしれんよwww

>>94
警告は全部潰してるよ。
そもそも、コーディングスタイルで蹴ってるからそんな警告があること自体知らなかった。
君ら無駄な努力払ってるね。

>>96
妄想強すぎ

100:デフォルトの名無しさん
07/10/26 23:41:24
>>89
コードチェッカの類を使ったことないだろ。

101:デフォルトの名無しさん
07/10/26 23:41:48
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ     >>80
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

102:デフォルトの名無しさん
07/10/26 23:42:42
>>97
ループ変数に、いつもshort iとか書いてるのか?

いやすぎる。

103:デフォルトの名無しさん
07/10/26 23:44:57
>>99
> そもそも、コーディングスタイルで蹴ってるからそんな警告があること自体知らなかった。

どんだけ情報弱者なんだよ・・・

104:デフォルトの名無しさん
07/10/26 23:45:03
>>80 は Lattice C 使ってるとか?

105:79
07/10/26 23:46:50
>>102
>>79に引数って書いてるだろ

106:デフォルトの名無しさん
07/10/26 23:47:00
>>99
おまえの、定数を左にもってくるってのも、コーディングスタイルじゃなくて、コンパイラに頼って
バグを見つけるって発想だろ。 >>80
警告出るから、そんなことしなくていいってがコンセンサスになってるから >>72 みたいな結果になるわけよ。


107:デフォルトの名無しさん
07/10/26 23:49:29
if (定数 == 変数)と書くコーディングルールがある会社、ということで、技術力が低い会社だと
レッテルを貼られるリスクを考えたことがないようだ。

108:デフォルトの名無しさん
07/10/26 23:50:08
このスレにぴったりのネタ会社だ

109:80
07/10/26 23:54:01
>>100
コードチェッカーの類?最近は全くないね。
VC++6、VS2005、gcc3.4.4などまあ常識の範囲内のコンパイラ
最近はやむを得ずSDCC使ってるけど、エンバグすら直ぐ分かっちゃうのでlint通す意味ナシ。

110:デフォルトの名無しさん
07/10/26 23:54:52
>>79
普通じゃない

111:デフォルトの名無しさん
07/10/26 23:55:36
>>109
日本語でOK

112:デフォルトの名無しさん
07/10/26 23:57:28
>>80
if (0 = a)はコンパイラに任せるのに、その他の複雑なバグが簡単に見つかるコードチェッカーは使わないと?

わけわからん

113:デフォルトの名無しさん
07/10/26 23:59:10
>>109
コードチェッカの意義とか理解してないっぽいな。。。

114:デフォルトの名無しさん
07/10/26 23:59:26
言い訳するにしてももうちょっと熟考すればいいのに

115:デフォルトの名無しさん
07/10/27 00:00:09
>>80
なんか必死だけど、どれだけ言葉を重ねても、レベルが低いことを証明することになるだけだぞ。

116:デフォルトの名無しさん
07/10/27 00:00:35
>>107
ほう、そんなリスクがあっても引く手あまたのウチの会社って凄すぎるってこと?wwww

>>106
どういたしまして。負け犬の遠吠えと受け取っておきますm(_ _)m


117:デフォルトの名無しさん
07/10/27 00:01:29
>>112
コードチェッカが無意味なくらい完璧にコードを書けるなら、定数を左にもってくるとか、
姑息なテクニックを使わなくてもいいよな。

118:デフォルトの名無しさん
07/10/27 00:03:08
コードレビュー文化があって、コードチェッカーが使える環境なら、最初は使ってて
使わなくなるなんて考えられない。

ライセンスの関係で全員がコードチェッカーを使えないとしても、レビュアーがコードチェッカーを
使うことで、レビューの工数をかなり減らせる。なので、以前使ってて、使わなくなるなんてやはり考えられない。

つまり、部下のミスを見つけてなんかいないってこった。
あ、部下がいないという線もあるな。

119:デフォルトの名無しさん
07/10/27 00:04:48
タコなコードチェッカーだったからうざくて使うのやめたってならわからなくもない

120:デフォルトの名無しさん
07/10/27 00:05:35
コードレビューなんてしてないんだろ

121:デフォルトの名無しさん
07/10/27 00:06:44
このスレで>>80が頑張る意味がわからない

122:デフォルトの名無しさん
07/10/27 00:07:03
右定数を見つけると最高レベルの警告を出す80謹製コードチェッカだったら使わなくなるかもしれない

123:デフォルトの名無しさん
07/10/27 00:07:24
コンパイラがどういうときに警告出すかとか知らないってのもどうかなぁ。
コーディングルールを守ってるから、警告でなくて知らないって話だけど、
そういうのは教条的に守るんじゃなくて、どうしてそうなってるかとか考えたほうがいいよ。

124:デフォルトの名無しさん
07/10/27 00:09:43
>>121
自分がレベル低いなんて夢にも思ってなかったから、現実を突きつけられて自我の危機に陥ってる。

125:デフォルトの名無しさん
07/10/27 00:12:01
定数が左ってのは、警告を出してくれるコンパイラやまともなコードチェッカーが無かった時代の名残だよな。
今ではまるで意味が無い。

126:デフォルトの名無しさん
07/10/27 00:12:16
if (定数 == 変数)なんて、いわゆる「バカよけのテクニック」だからね。
それを使っているからといって、声高に自慢するようなことではない。

127:デフォルトの名無しさん
07/10/27 00:13:59
前スレだかで馬鹿にしすぎたからムキになっちゃったんだろ。
お前ら自重しろ。

128:デフォルトの名無しさん
07/10/27 00:14:08
袋叩きwww

129:デフォルトの名無しさん
07/10/27 00:15:42
80は、左に置きたいから置いているようにしか思えない。

コンパイルエラーになることを理由にしているようだが、
それは右に置いてもコンパイラの警告が出るので互角(散々既出)。

となると、ほかに理由を提示しない今、残る理由は各人の好み。
そこで80は左を選択したということだろう。



130:デフォルトの名無しさん
07/10/27 00:19:37
>>123
・この警告は出るのが当たり前、気にするな
・この警告は出てもいいけど本当に大丈夫かチェック汁
・この警告出したバカは氏ね
みたいに警告のランク分けとかするよね。


131:デフォルトの名無しさん
07/10/27 00:20:02
単に後に引けなくなってるだけだろ。

132:デフォルトの名無しさん
07/10/27 00:23:50
>>129
> それは右に置いてもコンパイラの警告が出るので互角(散々既出)。

単にこれを知らないだけだと思うよ。

133:デフォルトの名無しさん
07/10/27 00:24:11
私はコードチェッカというものをいままで使ったことがありません
そんなに有効なものですか?

有名なものではどんなものがありますか?

134:デフォルトの名無しさん
07/10/27 00:27:49
OSと言語は?

135:デフォルトの名無しさん
07/10/27 00:30:19
>>133
URLリンク(www.swtest.jp)

静的解析ツールでぐぐれ

136:デフォルトの名無しさん
07/10/27 00:32:31
べつに必要としているわけではなくてどのようなものか知りたいので
何でもいいですが、自分の普段の仕事ではWindowsでC++です
Cygwinも常用しているのでUNIX系でも試せると思います

137:デフォルトの名無しさん
07/10/27 00:36:39
どんなものか知りたいなら、Cygwinでcheckをインストールして、Cで怪しげなコードを書いてチェックしてみろ。

138:デフォルトの名無しさん
07/10/27 00:37:42
間違えた。checkじゃなくて、splintだ。

139:デフォルトの名無しさん
07/10/27 00:41:10
WindowsのC++なら、ここから体験版をゲットするんだ。
URLリンク(www.techmatrix.co.jp)

140:デフォルトの名無しさん
07/10/27 00:41:52
ぱっと見て「ばかだなぁ」という奴を相手にしなくていいから、
「ヘタだなぁ」と思うコードを貼ってくれ。

141:133
07/10/27 00:42:06
>>135
あ、QACとかのことですか
使ったことはないけどプレゼンは受けたことがあります

そのときは、馬鹿に使わせるのは怖いツールだなと思いました

142:デフォルトの名無しさん
07/10/27 00:43:28
C++用のフリーな静的解析ツールは知らないなぁ・・・

143:デフォルトの名無しさん
07/10/27 00:44:18
ほれ。爆弾投下!

test.cpp
 if (a = 0) printf("x");

D:>bcc32 test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
警告 W8060 test.cpp 7: おそらく不正な代入(関数 main() )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

>>80
わざわざひねくれて if (0 == a) としなくても、ちゃんと警告出してくれるから。
ミスを防ぐため、というのは全然理由にならない。

「定数は左」って書き方って、15年以上も前に「Cマガジン」って雑誌が流行らせたんだよね。
当時の古いコンパイラは上のような警告は出していなかったかもしれない。
でも今は無料のタダのコンパイラでさえ警告出すようになって、「定数左」は意味の無いものになった。
15年も前に決着が付いて廃れたことを、いまだに「神の福音」のように信じ込んでいるヤツがいるんだな。
おまいは隠れキリシタンかw


144:デフォルトの名無しさん
07/10/27 00:47:00
釣られるなよおまいら……。単に自作自演なのかもしれんが。
ところで、見てくれ、このコード。(実物はJavaで、本質的な部分だけ抜粋してるのだが)
おまいら、レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?

void hoge(int a, int b) {
 bool result = false;
 for (int i = 0; i < 3; i++) {
  if (a == b - i) {
   result = true;
   break;
  }
 }
 if (result == true) {
  cout << "OK\n";
 } else {
  cout << "NG\n";
 }
}


145:デフォルトの名無しさん
07/10/27 00:47:21
長文お疲れだけど、それみんなもう知ってるから・・・

146:デフォルトの名無しさん
07/10/27 00:55:08
>>116
うん、君の会社が凄すぎるから、下民たちの為に会社名を教えてくれ。

> 警告は全部潰してるよ。
コンパイラの設定を変更して、特定の警告は表示させないようにしたのか?


147:デフォルトの名無しさん
07/10/27 00:56:08
「みんな」 に 80 は含まれていないが。

148:デフォルトの名無しさん
07/10/27 01:00:53
>>144
何を問題にしているのか分からないけど。
if (result == true)を気にしているのだとしたら、全員にメールでも出したら?
一番いいのは、タコなコードを書く奴は、片っ端からプロジェクト外に追放することなんだけど。
それをやったら、誰も残らなかったなんてのが笑い話じゃなくなるからな。


149:デフォルトの名無しさん
07/10/27 01:02:49
>>144
b-a が0~2ならOK,それ以外ならNGを出力ってこと?
不等号演算子とか教えるといいんじゃないかな。

150:デフォルトの名無しさん
07/10/27 01:05:15
どうしようもなく汚いコードのところで仕事をしたとき、警告がでまくったけど、
ま、こんなもんかと思って、放置しておいたら、上のヒトの目にとまって、
警告が出てるじゃないかと注意されてしまった。

で、警告の原因を調べたら、そのコードを動かす環境にインストールされてる、その部署の
ライブラリがバージョン古くて、プロトタイプが、K&R方式になってやんの。

仕方ないので、makefileを書き換えて、警告を全部抑制した。

151:デフォルトの名無しさん
07/10/27 01:05:37
つまり

if (b - a < 3)
OK;

ということでしょ
境界の辺が自信ないが

152:デフォルトの名無しさん
07/10/27 01:19:53
>>151
b<aだとダメじゃね?

153:デフォルトの名無しさん
07/10/27 01:20:11
プロトタイプ宣言はK&Rにはできないんじゃないだろうか

154:デフォルトの名無しさん
07/10/27 01:22:32
それは当然 else 節を省略したのですけど
そういうことではない?
酒が入ってるので不安

155:デフォルトの名無しさん
07/10/27 01:26:07
>>153
ああ、そうだっけ。

int hoge();

みたいに、戻り値だけで、引数のないプロトタイプだった。

156:デフォルトの名無しさん
07/10/27 01:31:26
それは多分C言語的には完全に合法なので警告のほうがうざいと思う

先に宣言が

int f();

とあって後で定義が

int f(int a) { ... }

とANSIならばエラーエラーかな?
うろ覚えでごめん

157:デフォルトの名無しさん
07/10/27 01:33:18
>>80の所属している会社を大胆予想。
仕事は来ていて技術力は無いという辺りから、
・富士通
・日立
・NEC
の関連会社を予想。

しかし、仕事を大量に受けているという記述から想像するに、
・人材派遣会社
に所属しているのではないだろうか。

こう考えると、技術力が無いのにそれに気が付かない理由も説明できると思う。

#JAVAのswingで画面を作っているんだけど、クラス図もイベントトレース図も存在しないって、此の先木大丈夫なんだろうか。


158:デフォルトの名無しさん
07/10/27 01:39:31
> 80 名前: デフォルトの名無しさん [sage] 投稿日: 2007/10/26(金) 22:43:44
から3時間足らずで約70レスか。
このペースで行けば、39時間かからずに埋め立て完了か。
今までの過疎化が嘘のようだなw


159:デフォルトの名無しさん
07/10/27 01:41:01
>>148
レビューしてすら、さくっとスルーされそうなことはわかりますた。
>>149
yes. 問題は、コレと同レベルのコードがと某社のおひさるなサイト上で動いてたってことなんだ。
さらに恐しいことは、a, bは日付を8桁の整数に変換したものだったりしたんだ……。
>>154
条件式が足りてないれす。こんな感じ?
int d = b - a; if (0 <= d && d < 3) ...


160:デフォルトの名無しさん
07/10/27 01:47:51
というか、何をしたいコードなのか教えてくれないと、144のコードが正しいか間違っているかは判断できないぞ。


161:デフォルトの名無しさん
07/10/27 01:50:10
正しいか間違ってるかの問題じゃなく
冗長すぎるのを問題にしていると思う

162:144
07/10/27 01:59:48
>>159
あ、「日付を8桁の整数に」ってのは、20071027みたいなやつ(YYYYMMDD)のことね。為念。

163:デフォルトの名無しさん
07/10/27 02:02:36
冗長かどうかも、何がやりたいのかが分からないと、何とも判断できないからね。
問題によっては、冗長に見えるやり方が最適解になったりすることもあるし。


164:デフォルトの名無しさん
07/10/27 02:05:19
でもあれはさすがに型も明示されてるし言い逃れようがないでしょ

165:144
07/10/27 02:11:50
>>161
です。冗長過ぎるというより、きっぱりはっきり無駄かつ無意味。
>>160>>163
一般論としてクソコードであると賛同を得られないことに絶望した。
つか、釣りか? 釣りなのか?

166:デフォルトの名無しさん
07/10/27 02:18:21
>>165
このスレになじまない内容なので、あまり興味を持たれなかっただけかと

167:デフォルトの名無しさん
07/10/27 02:18:22
お前が釣ろうとしてるのかと深読みしてしまったよ

168:デフォルトの名無しさん
07/10/27 02:24:40
>>144はこのスレで希に見る良題だと思ったけど
あぁ、希だからか

ちなみに自分は144ではないです

169:149
07/10/27 02:29:03
>>165
俺は賛同するぞ。
簡単な処理をあんなに難しく実装する才能はある意味凄いと思う。

170:デフォルトの名無しさん
07/10/27 02:32:58
if (cond) for (;;) {
} else {
}
とか
for (;;)
 if (cond1)
 if (cond2)
{
}
ってありなの?

171:デフォルトの名無しさん
07/10/27 02:34:06
>レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?
これは質問じゃなくてただの皮肉だったのか

172:デフォルトの名無しさん
07/10/27 02:34:05
つーか、条件式の定数を左に書くのは、代入文の検出とかいってる奴なんなの?
レベル低すぎてどうしようもない。ちげーだろ。

if( NULL == hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) )
{
}

if( hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) == NULL )
{
}

前者と後者、どっちが読みやすいかって話だ。
そもそも関数の引数が多すぎる、とか言われても困るぞ。
Win32APIとかだと、引数8個程度のなんてゴロゴロあるからな。
あと、後者だと、環境によっては==NULLがエディタの外に出てしまって、見えないことがあることも付け加えておく。

173:デフォルトの名無しさん
07/10/27 02:39:46
>>172
関数より定数の方が長い場合もあるわけで

174:デフォルトの名無しさん
07/10/27 02:41:33
>>170
文法的には間違っては無さそうだが、ひどく読みづらいな。

175:デフォルトの名無しさん
07/10/27 02:41:49
>>173
その場合は定数を後ろに書けば良いだろ。

176:デフォルトの名無しさん
07/10/27 02:43:44
>>172の言いたいことがケースバイケースであるなら正解
定数左が当然といってるのなら>>173が正解

177:デフォルトの名無しさん
07/10/27 02:50:31
ったくもう、まだ続ける気かよ。

>>172
こういう発想は無いの?

if( hoge_func(hoge_arg1
 , hoge_arg2
 , hoge_arg3
 , hoge_arg4
 , hoge_arg5
 , hoge_arg6
 , hoge_arg7
 , hoge_arg8) == NULL )
{
}

178:デフォルトの名無しさん
07/10/27 02:51:18
だいたいさ、お前ら良く考えてみろよ。
疲労困憊のときに>>172の後者の文を見て、本当に==NULLを読み飛ばさない自信が有るか?
==NULLはエディタの外に出てしまっていて見えてないかもしれないんだぞ。
必ずスクロールして確かめる自身はあるか?
また、他人が読んだとき、必ずスクロールしてくれる自身はあるか?

そんなリスク背負うぐらいなら、場合によっては定数を先に書いても良いんじゃないか?
コーディングスタイルに拘るあまり、意固地になっちゃってどうするの。

179:デフォルトの名無しさん
07/10/27 02:57:03
つか、Win32APIを使ってる時点で、何と比較するのか判っているのだから、定数が左にある必要は無いと思うが?

CreateWindowを使った後にHWNDを定数と比較する
その定数は何かなんて、誰だって判る問題だ
ファイルポインタを定数と比較する
その定数はなんなのか判らない奴は、Cで真面にプログラム組む事が出来るとは思えない

変な定数と比較するのなら、定数を前に持っていくより、何のためのテストかコメントを残す方が余っ程気が利いている


180:デフォルトの名無しさん
07/10/27 02:59:16
>>177
どこで折り返すかって話になるが、
結局、自分のプログラムが何処で誰に読まれるか判らない以上、
「何列以上になったら折り返す」ということを語るのは難しい。
読み手のエディタのサイズを予測するすべは無い。

それに、どの様な書き方をしても、後に書くものは先に書くものに比べて
目立ちにくいということには変わりない。
条件式の場合は、関数の引数よりも条件そのものの方が大事だから、
大事なものを先に書いちゃおうという視点から、読み手のことを考えれば、
定数は自然と左に出てくる。逆に自分のスタイルを貫けば右に行く。

181:デフォルトの名無しさん
07/10/27 03:02:31
>>179
なんでWin32API限定で話を進めるんだよ。
>>172のどこにもWin32APIに限定しますなんて書いてないだろ。
離散数学の基礎からやり直してください。

182:デフォルトの名無しさん
07/10/27 03:02:42
いや、昔は80桁越えたら折り返すってルールがあったんだが。

マウスの付いてるパソコンしか使ったことの無い世代が増えたなぁ。
・・・しみじみ。

183:デフォルトの名無しさん
07/10/27 03:04:58
>>182
今の人だけど、常識としてちゃんと知ってるよ。受け継がれてるから安心して。

184:デフォルトの名無しさん
07/10/27 03:09:37
それを強制したら老害だけどね

185:デフォルトの名無しさん
07/10/27 03:10:42
>>181
別にWin32API限定でなくても、定数を比べる場合はif文以前に比べる定数は決まってるだろう
自分で作った関数だろうと、人の作った関数だろうと、定数で比較する時点で、どんな定数と比較するのか決まっているじゃないか


186:デフォルトの名無しさん
07/10/27 03:17:30
そもそもさ、条件式の定数を右に書くか左に書くか、必ずどっちかに統一しろって言ってる人達は何なの?
繰り返し文は、かならずfor文で書くべきで、whileとかdo-whileを使うなとか言うのか?
(俺は繰り返し文は全部forで書くがな)
分岐は必ずifで行うべきで、switchは使うなとか言うのか?
(俺はswtich文嫌いだがな)
gotoだって、使うなといわれてはいるけど、例外処理に使うのならなんら問題ない。

どうして、場合場合によって使い分けようとしないの?

187:デフォルトの名無しさん
07/10/27 03:22:49
>>172
「普通の感性を持っている人」は、そういう場合は次のようなコードを書くから、なんら心配することはありません。

void *p = hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8);
if (p == NULL) {
}

理解できましたか?


188:デフォルトの名無しさん
07/10/27 03:25:32
>>185
全ての関数の仕様が頭に入ってる人なんて居ない。
他人の使っている関数の仕様まで全部事細かに覚えてる人なんて居ない。
比べる定数は決まっているが、それはあくまで仕様上での話。
今、バグを防ぎたいと考えているのだから、全てのプログラマが仕様を完全に網羅しているとは
考えるべきではない。そういう甘い考えがバグを生む。

それから、プログラマの集中力の問題もある。
先に書いたものの方が、高い集中力を持って読んでもらえる可能性が高い。
だから、条件式の条件は成るべく先に持っていったほうが良いだろう。
長い長い関数呼び出し部を読み終わったころには、集中力がなくなっているかもしれないから。

189:デフォルトの名無しさん
07/10/27 03:27:31
>>144
おまえ自身が
> 本質的な部分だけ抜粋してるのだが
と言っているんだよな。

本来のコードだと
for (int i = 0; i < 3; i++) {
}
の中で重要な処理をしているかもしれない。
144は本質じゃないと切り捨てたかもしれないけど、その判断が間違っている可能性は高いわけだ。
だから、何をしようとしたコードなのか分からないと、冗長かどうかの判断は出来ないといっているのだが。
ここまで丁寧に説明してあげれば、144も自分のおろかさを理解してくれるかな?


190:デフォルトの名無しさん
07/10/27 03:28:23
>>187
そう書くのが一番良いんだけど、書かない奴も居るだろ。

191:デフォルトの名無しさん
07/10/27 03:32:51
とは言ったものの、わざわざ
int ret = strcmp(str1, str2);
if(ret == 0){}
なんて書く奴がどれだけ居るのか気になるが。

192:デフォルトの名無しさん
07/10/27 03:35:07
>>191
その程度なら、
if (!strcmp(str1, str2)) {}
と書くのが一番分かりやすいから。


193:デフォルトの名無しさん
07/10/27 03:40:29
>>192
つまり「程度」によるわけだよな。
だから、程度によっては定数を左に持ってきても良いだろ。

それから、
if (!strcmp(str1, str2)) {}
が許されるなら、
if (0==strcmp(str1, str2)) {}
も許されるだろ。
if ( strcmp(str1, str2) ! ) {}
と、後ろに「!」は書かないからな。

後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
考える人も多いだろう。

194:デフォルトの名無しさん
07/10/27 03:42:30
>>178
NULLとの比較は読み飛ばしにくくなるかもしれんが
hoge_arg8を読み飛ばす可能性はかなり大きくなるだろ?

引数8つもある関数を直接ifに入れるって事は
文脈上ifよりも関数呼び出し自体が重要って事だろ

それなら、エラー処理系であろうifの条件よりも
hoge_arg8が見えやすいほうが良くないか?

195:デフォルトの名無しさん
07/10/27 03:43:07
あとさ、定数左禁止派はさ、do-whileはどうなのよ。あれは良いのか?
あっちのが色物に思えるが。

196:デフォルトの名無しさん
07/10/27 03:43:16
つか、無闇矢鱈と左に定数を置きたがる奴は、出してくる例題を間違えとる

if ((LOW_AGE < age) && (age <= HI_AGE)) {}
こういう場合は、定数が左にあることに対して意味があるが

if (NULL == pointer) {}
この場合は、定数が左にあることの意味は無い
しいて言うならば、コードを何れだけ見づらくできるか位の意味はあるかもしれない
(我々は、NULLがポインタなのかを知りたいのではなく、ポインタがNULLであるのかを知りたいのだから)

197:デフォルトの名無しさん
07/10/27 03:50:28
>>193
そもそもstrcmpって定数が右を想定した作りだと思う

  if (0<strcmp(str1, str2)) {}

どっちが大きい時ifの中に入るかすぐわかるか?

198:デフォルトの名無しさん
07/10/27 03:50:48
>>193

C FAQより
----------
17.3:
ほら、このわざを見て。

if(!strcmp(s1, s2))

これはよい書き方?
とくによい書き方ということはない。ただし人気のある書き方ではある。このテストは、二つの文字列が同じときに成功する。しかしこの 形は等しくないことをテストしているようにみえる。

より優れた選択肢としては以下のようなマクロを使うことがある。


#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)

コーディングスタイルに関する考え方は、宗教に関する考え方と同じ で、議論に終りがない。よい書き方は価値ある目標であるし、たいて いは見ればよいか悪いかわかるが、文章にすることはできない。質問 17.10も参照のこと。
----------

どこにもif (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいとは書いてありませんが?
より良い書き方としてあげている例も、
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
と、定数は右側に来ていますよ。


199:デフォルトの名無しさん
07/10/27 03:50:53
>>194
hoge_arg8は見えにくくなるが、引数が途中で切れている場合、プログラマは気づく。
だって構文的に変なところで切れているからね。
だけど、==NULLがあるかないかまでは想像が及ばないかもしれない。

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) )

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL)
は、エディタ上では同じに見えるからな。
実は後者だったのに、早とちりして、前者だと思い込んでしまうかもしれない。

200:デフォルトの名無しさん
07/10/27 03:51:32
ケースバイケースなのはわかったから
どこまでが左でどこからが右なんだ

201:デフォルトの名無しさん
07/10/27 03:51:39
ついでに、定数の左置きに対して。

--------------------------------------------------------------------------------
17.4:
どうしてif(x == 0)と書くかわりに、if(0 == x)と書く人がいるのか。
A:

これはよく以下のように書いてしまうことを防ぐためのコツである。
if(x = 0)

定数を==の前に持ってくる習慣を付けておけば誤って、
if(0 = x)
と打ち込むとコンパイラが文句を付ける
どうやら2回=を打ち込むことを覚えるよりは、テストのオペランドの順をひっくり返す ことを覚えることのほうがやさしい。
(訳注:本のほうには、これは特によい書き方というわけではないと書 いてある。実際これでは両辺が変数の場合のif(a = b)という誤りを 捉えることはできない。こんな技を覚える暇があれば、lintの使い方 を覚えること。)


202:デフォルトの名無しさん
07/10/27 03:53:55
>>199
てゆうか、折り返しもできずに、右端がスクロールしないと見えないような腐ったエディタは使うなよ。。。


203:デフォルトの名無しさん
07/10/27 03:54:12
>>196
だけど、NULLと比べてポインタがどうなのか? という考え方をすれば、NULLが先に来る。
逆に、ポインタと比べてNULLがどうなのか? とは言わない。
ポインタが先に来るときは、ポインタがNULLであるか? と言う。
つまり、どっちでもいいということだ。

204:デフォルトの名無しさん
07/10/27 03:55:19
>>200
ケースバイケースで、比較の主体が左にきたり右にきたりするソースが、一番見難い(醜い)です。


205:デフォルトの名無しさん
07/10/27 03:57:02
>>198

>>193のどこにも

>C lang FAQ に if (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいと書いてある

なんて書いてないだろ。本当に離散数学の基礎からやり直せ。
何を述べていて、何を述べていないのかの判断ぐらいつくようにしろよ。
じゃないと議論も糞も無い。

206:デフォルトの名無しさん
07/10/27 03:57:10
>>199
ああ、確かに
つまりあなたは「{」の前に改行すべきではない、と俺に言わせ
別の論争を勃発させたいのだなw

207:デフォルトの名無しさん
07/10/27 04:00:11
>>201
C langage FAQ なんてみんな一通り目を通してるんだよ。
一々貼り付けんでも良い。
今時定数を左に持ってくる人達は、>>201のような理由で左に持ってきているわけではない。
左に書いたほうが目立って言いと考えたから、左に持ってきているだけ。
それ以上でもそれ以下でも無い。目立つか目立たないか、ただそれだけ。

>>202
visual studio の初期状態ではそうですよ。

208:デフォルトの名無しさん
07/10/27 04:02:06
>>204
ケースバイケースで、繰り返し文がforになったりwhileになったりdo-whileになったら
読めない人ですか?
ケースバイケースで、分岐がifになったりswitchになったりすると、読めない人ですか?

209:デフォルトの名無しさん
07/10/27 04:04:08
>>206
改行しなくても一緒だよ。
・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) ){

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL){
は、エディタ上では同じに見えるからな。
俺も通常は改行させないな。

210:デフォルトの名無しさん
07/10/27 04:04:58
おまえら一晩中こんなくだらない論議してたのか?
夜はちゃんと寝なさい。

211:デフォルトの名無しさん
07/10/27 04:06:48
だいたいさ、定数なんて右でも左でもどっちでも良いだろ。
それより、do-whileの方が気持ち悪くないか?
いやマジで。
do{
}while(exp); ← このセミコロンとか。
これは良くて、定数左は駄目とか言ってるやつって、どういう思考なのかわからん。

212:デフォルトの名無しさん
07/10/27 04:09:18
>>209
「,」で終わってたらその後に続くのはいやでも解るでしょ
端を見ようとしないのはそいつの責任だよ

213:デフォルトの名無しさん
07/10/27 04:16:44
>>208
そうだよな
繰り返し文なんていっぱいあるもんなー

#define loop(x) for(int iloop=0;iloop<(x);iloop++)
#define twice loop(2)
#define infinite for(;;)
#define never for(;0;)
#define strpatrol(s) for(char *strpatrolp=(s);*strpatrolp;++strpatrolp)

214:デフォルトの名無しさん
07/10/27 04:16:58
>>205
だんだん苦しくなってきたね。論理が破綻してきたよ、キミ。今夜が山だ。

>後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
>こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
>考える人も多いだろう。


215:デフォルトの名無しさん
07/10/27 04:17:24
俺がなぜ定数が右にしているか考えてみた
a=1;は「aに1を入れる」と読むなら
if(a==1)は「aに1が入っているなら」と読むからであって
=と==を混同させたいんだよ
そもそも混同させたくて同じ記号を使ってるんじゃないかと思えてくるほどだよ

216:デフォルトの名無しさん
07/10/27 04:17:37
>>212
続いていても、==NULLがあるかないかは、スクロールしてみるまで判らない。
引数がそれほど重要でない場合なら、スクロールを惜しむかもしれない。
実際、もうへとへとの状態でプログラムを読んでる場合だってあるわけで。
他人の責任だから関係ない、とは言っても、プロジェクトが停滞すると、
結局自分も巻き込まれるわけで。誰の責任かは正直どうでも良い。

217:デフォルトの名無しさん
07/10/27 04:19:59
>>205
おいおいw

それじゃあ、>>193が全くの主観で何の根拠も無いって事を白状しているだけじゃないかw
で、より良い例として挙げられているコードでは、定数が右側に来ているのは、軽くスルーですか?
FAQを根拠に!strcmp()を否定するなら、よりよい書き方についてもFAQを根拠にしたほうがいいんじゃないかね?


218:デフォルトの名無しさん
07/10/27 04:20:57
>>214

>後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
>こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
>考える人も多いだろう。

のどこをどう読んだら、

>C lang FAQ に if (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいと書いてある

という意味になるの?
ねぇねぇ教えて。中学生とか? 日本語読める?
「~の方がまだマシ」という表現を使っているわけだから、よりベターな方法があることも
暗に示しているのだが。

219:デフォルトの名無しさん
07/10/27 04:21:09
NULLとかなら見りゃわかるからいいけど
変数っぽい面して実はconstでしたみたいなのが右や左にいるとうざいから
ある程度統一するのはいいんじゃないの?

220:デフォルトの名無しさん
07/10/27 04:21:41
>>216
だから、単体テストをすればちゃんとエラーは検出できますよ。
テストをやらないって企業文化なら、仕方ないかもしれませんが。


221:デフォルトの名無しさん
07/10/27 04:21:52
あした早起きして遠足だってのに・・・

こんなくだらない事で眠れなくなっちまった・・・

222:デフォルトの名無しさん
07/10/27 04:23:30
>>203
だから、なんでNULLとポインタを比較するのかが問題なんだろ
ポインタが有効なのか無効なのかを知りたいんであって、NULLと比較してポインタがどうなのかを調べたい人は誰一人居ない

定数が左にあって、唯一読みやすいのは、変数が一定の値の範囲内にある事を知りたい場合のみだろ
それ以外で、定数が左にあっても、読みにくいことはあれ、読みやすく感じることは有り得ない(そのコードを書いた奴だけは、読みやすいのかも知れないが)


223:デフォルトの名無しさん
07/10/27 04:26:28
>>208
例えば、10回処理を繰り返す部分で、
for (i = 0; i < 10; i++) {}

i = 0;
while (i < 10) {
i++;
}
の両方が適当に使われたとしたら、読む人は苦労するだろうな。
forとwhileの使い分けにどんな意味が隠されているのか悩むだろうか。


224:デフォルトの名無しさん
07/10/27 04:26:29
==の話ばかりするからダメなんだ
一時的に条件式を無効にしたくなったらどうする?
誰だってif(0&&condition)って書くよな?
定数0を左に書いた方がいいことは分かり切っている

225:デフォルトの名無しさん
07/10/27 04:27:25
>>217
>>193 の 後半は余談だよ。
if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね、てこと。
それならまだ定数左派の方が信用できるよねって。
ロジカルに何か述べているわけではなくて、単に人格批判です。

だけど、if (!strcmp(str1, str2)) {} なんてコードをシレっと書いちゃうやつの言うことなんて、
信用できないよね。読みやすいコードを書くためのスタートラインにも立ってない。

226:デフォルトの名無しさん
07/10/27 04:28:03
>>218
もうヤケクソ?

>>193 「~の方がまだマシ」

そりゃ確かに、「~の方がいい」 とは書いてないけど。
「いいとは書いてない、マシと書いた」ってアンタ、小学生の喧嘩レベルやんw
眠いの?

227:デフォルトの名無しさん
07/10/27 04:28:33
>>224
書かないよ。


228:デフォルトの名無しさん
07/10/27 04:29:43
>>220
何いってんの?
だったら初めからコーディングなんて拘らなきゃいいだろ。
どうせ単体テストするので、好きにやればいいじゃないという話になる。


229:デフォルトの名無しさん
07/10/27 04:29:50
つーかさ
もうif(0 == a || a == 0)でよくね?
右にも左にも定数が来てて完璧だろう

230:デフォルトの名無しさん
07/10/27 04:31:12
>>225
> if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね
根拠は?

単に俺が気に食わないだけ、なんて言わないよねw
もしかして、==とか<とか>=なんかが書いてないと、条件文が理解できない人ですか?


231:デフォルトの名無しさん
07/10/27 04:31:43
>>224
//if (condition)
if(0)

232:デフォルトの名無しさん
07/10/27 04:32:32
>>216
引数よりも==NULLの方が重要ならifの中に
関数呼び出しを丸ごと入れたりなんてしないでしょ

人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
そんな人のケアをする自信なんて、俺にはないな

233:デフォルトの名無しさん
07/10/27 04:32:51
>>222
ポインタが有効か無効かを知りたい、と考えることも出来るし、
逆に、有効なポインタなのか、無効なポインタなのか、と考える人も居るかもしれない。
どっちで考えてもいいし、何の問題も無い。

234:デフォルトの名無しさん
07/10/27 04:33:34
>>228
単に、「プロジェクトが停滞する」に対する反証をしただけですよ。
こんなことも読み取れないなら、ひとまず睡眠を取って、頭をクリアさせたらどうですか?

え、クリアさせても今と変わらない?
それは、もう、どうしようもないかな。


235:デフォルトの名無しさん
07/10/27 04:35:06
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆          ___________
      ∧_∧ | |         /          / おらっ!出てこい
     (   )| |_____    ∧_∧   <  Cマガジン ●田
     「 ⌒ ̄ |   |    ||   (´Д` )    \ おまいのせいで、こんだけ・・・
     |   /  ̄   |    |/    「    \      ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |

236:デフォルトの名無しさん
07/10/27 04:36:29
こんな醜い争いが二度と起こらないように
C++0xでは定数をLvalueにしてもらうしかないな

237:デフォルトの名無しさん
07/10/27 04:36:45
>>233
無効なポインタがどれかを調べたいなら、
if (NULL == xxx)って書いたほうが分かりやすいかもね。


238:デフォルトの名無しさん
07/10/27 04:37:29
>>223
後者のケースだと、for文を使うべきだよ。
whileを使う時は主にカウンタ変数がいらない時だな。
forとwhileを使い分ける人が居るように、
定数を右に書いたり左に書いたりする人が居ても良いだろ。
そして、定数が左だからってそんなに怒るほどのものでもない。

239:デフォルトの名無しさん
07/10/27 04:40:31
電車の座席に座るヤツが居るように
電車の床に座ってもいいだろ!
公園のベンチに座るヤツが居るように
コンビニの駐車場に座り込んでもいいだろ!
そんなに怒るほどのものでもない。

240:デフォルトの名無しさん
07/10/27 04:43:02
>>226
眠いのはお前だろ。眠くてしょうがないお前が勝手に勘違いしただけだろ。
「AよりBの方がまだマシ」という言い方をした場合、
「Bが良い」と主張しているということには決してならないよ。

糞と尿、どっち食うかと言われて、
「糞より尿の方がまだマシ」と答えた場合、
「尿が良い」と言うことにはならないだろ。

要はお前が勝手に勘違いしてるんだよ。
お前みたいなおっちょこちょいが居るから、文句言われようとも、
わざわざ定数を左に書かざるを得なくなる。その辺わかれ。

241:デフォルトの名無しさん
07/10/27 04:43:16
もう「比較演算子の左オペランドに定数を置く奴は死ね」スレでも立ててそっちでやってくれんかね

242:デフォルトの名無しさん
07/10/27 04:46:20
>>240
おまえ、実は>>80だろ?
もう、定数を左に置いても苛めないからさ、どこの会社かだけは教えてくれ。
お前を真人間に教育するよりも、関係を持たないようにする方が、遥かに安上がりだわ。


243:デフォルトの名無しさん
07/10/27 04:46:23
寿司食いたいフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ

244:デフォルトの名無しさん
07/10/27 04:48:19
if (0 == a)
  ↑  ↑
  糞  尿

245:デフォルトの名無しさん
07/10/27 04:49:43
俺なら尿を選ぶ。糞はちょっとな・・・

246:デフォルトの名無しさん
07/10/27 04:52:19
>>230
230は単に釣りだと信じたいのだが・・・。
strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、
正真正銘、整数としての戻り値を返す。
だから整数と比較するべき。
意味上も型上も正真正銘整数なものを、
ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。

逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。
Cの禁じ手全部 OK じゃね?
定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。

247:デフォルトの名無しさん
07/10/27 04:58:36
やばい、真性のキ印だったのか。

>>246
そもそも、Cにはboolなんて型は存在しないぞ。
ifとかの条件式は、単に0か非0かを見ているだけ。


248:デフォルトの名無しさん
07/10/27 05:01:44
>if (!strcmp(・・・)) と書くのが一番わかりやすい
てのは、いくら何でも間違いだろ。
勢いで書き込んだ後、おっといけね、strcmp だった~orz ってとこだろね。

249:デフォルトの名無しさん
07/10/27 05:02:52
>>232
>引数よりも==NULLの方が重要ならifの中に
>関数呼び出しを丸ごと入れたりなんてしないでしょ
そうとは限らんよ。関数として見れば、関数が大事だし、
if文として見れば、条件が大事だ。

>人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
>そんな人のケアをする自信なんて、俺にはないな
改修するならしっかり読むが、さらっと目を通すだけという場合も有るだろ。
おっちょこちょいなやつは何処にでも居るもので、そういう奴が変な勘違いを起して、
面倒を起したら困る。
実際、このスレにも自分の反論しようとしている相手の文章すら、
まともに読まない奴が居るわけで。
んで、自分のミスなのに、「お前の書き方が悪い」と開き直る。
だから、自分から相手が読みミスらないような書き方をする必要が出てくる。
結局こっちにも火の粉は飛んでくるからね。

250:デフォルトの名無しさん
07/10/27 05:05:45
最高にド低脳な発言してください in ム版(XVII)
スレリンク(tech板)

125 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/27(土) 05:00:40
 strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、
 正真正銘、整数としての戻り値を返す。
 だから整数と比較するべき。
 意味上も型上も正真正銘整数なものを、
 ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。

 逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。
 Cの禁じ手全部 OK じゃね?
 定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。

↑最高にド低脳な発言!

251:デフォルトの名無しさん
07/10/27 05:09:05
>>250
ワロタ

自分で「ド低脳」って認めてどうするw

252:デフォルトの名無しさん
07/10/27 05:09:26
>>234
だから好きにやれば良いじゃん。

ウマいコードってのは、プロジェクトが停滞しづらいコードだろ。
逆にヘタなコードってのは、プロジェクトを停滞させるコードだろ。

あなたにウマいコードは必要ないじゃない。

253:デフォルトの名無しさん
07/10/27 05:10:09
オチがついたところで、また明日。おやすみなさい。

254:デフォルトの名無しさん
07/10/27 05:11:08
>>239 は コンパイルエラー

255:デフォルトの名無しさん
07/10/27 05:13:27
>>242
違う。
この議論は前スレから永遠と続いている。
というか、このスレは今現在俺だけで持ってるようなものなんだけど、
前スレからの流れを見てもらえれば、俺が>>80でないことは分かる。
物事への認識のレベルが違いすぎるからすぐ判るはず。

256:デフォルトの名無しさん
07/10/27 05:18:14
>>247
boolが無いから整数で代用しているんだろ。
>>247の2行目に、
>boolを整数で代用している
という文がちゃんと入ってるだろ。
単に整数値といっても、C言語の場合は、意味の上では、整数だったりboolだったりするから、
その辺は使い分けるべきだろ。
その程度の意識も無いのに、ウマいもヘタも無いね。
そういうやつは定数が左にきたぐらいでグダグダいう立場に無い。
糞食いながら、「しょんべんマズー」と言ってるようなものだ。

257:デフォルトの名無しさん
07/10/27 05:27:13
つーかもう今日は寝る。
返事はまた明日気が向いた時に返すかも。

今日は張り合い無かったなぁ。
if (!strcmp(str1, str2)) {} が 汚いって事すらもわからないような奴では、
ちょっと流石に相手にならないよ。
そういうやつが、他人のコードを綺麗汚いと、いきり立ってるのかと思うと、泣けてくるね。
身の程をわきまえるべき。

>>250>>125 をド低脳スレに貼ったらしいが、この始末どうつけるつもりなんだろうな。
他の右派(というか、単なるアンチ俺、もとい、暇つぶしの友)が可愛そうだ。

258:デフォルトの名無しさん
07/10/27 05:35:47
仮にif (!strcmp(str1, str2)) {}がif (0==strcmp(str1, str2)) {}に劣るとしても、
if (0==strcmp(str1, str2)) {} がif (strcmp(str1, str2)==0) {} に劣ることには変わりないのに。

259:デフォルトの名無しさん
07/10/27 07:33:42
変数左辺派による工作
URLリンク(ja.wikipedia.org)

260:デフォルトの名無しさん
07/10/27 07:38:41
腹減った

261:デフォルトの名無しさん
07/10/27 07:43:11
>>257
>暇つぶしの友
他所でやれ脳足りん。

262:デフォルトの名無しさん
07/10/27 07:49:35
if (!strcmp(str1, str2)) {} は綺麗

*dst++ = *src++ と勝るとも劣らないくらい綺麗


263:デフォルトの名無しさん
07/10/27 07:50:41
while(*dst++ = *src++);

264:デフォルトの名無しさん
07/10/27 08:24:17
英語ができると、if (!strcmp を、if not string compare と読んでしまうので
等値性をテストしているとは認識しにくいな。

!をnotと読まない人は気にならないんだろうけど。

265:デフォルトの名無しさん
07/10/27 08:55:17
if (!strcmp(str1, str2)) {} の何がいけないのか分からない

266:デフォルトの名無しさん
07/10/27 08:56:01
if(str1 == str2) {}
だろ上官

267:デフォルトの名無しさん
07/10/27 08:59:28
>>266
その発想は無かった

268:デフォルトの名無しさん
07/10/27 09:06:07
・・・なんでこんなことを議論しているのかがよく判らない。

269:デフォルトの名無しさん
07/10/27 09:14:44
おまいらおはよう。未だに左定数の話をしていて正直がっかりだ。

>>169
賛同ありがとう。「簡単なことをこんなに難しく書くやつがいるんだぜ」「頭
痛いよなぁ」で済むと思ったら、予想外の展開になって別の意味で頭が痛かっ
たよ。

>>171
皮肉? いや、いたってマジだぞ? だってソース見たとき本気で頭かかえたもの。
ちなみにこういうコードへの対策は、「10行以上書いたらレビューしろ。毎日
レビューしろ。動いてからレビューするな」以外に知らないんだ。(そういう
意味でペアプログラミングはすげー有用だと思うんだが、まだ実現できたこと
がない)

>>189
> の中で重要な処理をしているかもしれない。
それだったら「本質の抜粋」にならないでしょーが。
for文の中は、変数名と定数値以外、「そのまんま」だ。
違う点は、オリジナルはC++じゃなくてJavaなこと、関数(メソッド)のシグネチャ、
書いた処理の前にもコードがあること、最後のif文のブロックの中身。


270:デフォルトの名無しさん
07/10/27 09:39:00
>>269
補足しておくと、ここで言ってる「本質」とは、
「b-N<a≦b (a, b, Nは整数) を判定する、ただそれだけのために、大小比較じゃなくてループを使ってる」
ってことだと書けば理解してもらえるか?>>189

271:デフォルトの名無しさん
07/10/27 09:58:28
ぱっと見て「ヘタだなぁ」と思うスレ

272:デフォルトの名無しさん
07/10/27 10:06:30
くだらねー議論してんなぁ。
定数を左に置くか否かなんてとっくの昔に結論でてるだろうが。

>>196のような例外を除いて定数を左において可読性落としたり、
スクロールしないと全部が見渡せないような条件式なんか書くな。

コンパイラが警告出さない時の数十年前に編み出された小手先を
未だに神の一手が如く崇拝してんじゃねぇよ、ボケ。
これを知ってる俺って技術力たけぇなんて思ってたかもしれんが、
ド低脳の証明だ。玉石混交の石のほうだ、カス。

273:デフォルトの名無しさん
07/10/27 10:14:14
おまえら、何度も同じことをくりかえすならfor文の中にでも入れとけよ

274:デフォルトの名無しさん
07/10/27 10:18:04
>271
禿同

275:デフォルトの名無しさん
07/10/27 10:18:23
おはよう。しつこいがもう一度爆弾投下!

test.cpp
 if (a = 0) printf("x");

D:>bcc32 test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
警告 W8060 test.cpp 7: おそらく不正な代入(関数 main() ) ←←←【ここ注目!】
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

>>80
わざわざひねくれて if (0 == a) としなくても、ちゃんと警告出してくれるから。
ミスを防ぐため、というのは全然理由にならない。

「定数は左」って書き方って、15年以上も前に「Cマガジン」って雑誌が流行らせたんだよね。
当時の古いコンパイラは上のような警告は出していなかったかもしれない。
でも今は無料のタダのコンパイラでさえ警告出すようになって、「定数左」は意味の無いものになった。
15年も前に決着が付いて廃れたことを、いまだに「神の福音」のように信じ込んでいるヤツがいるんだな。
おまいは隠れキリシタンかw

276:デフォルトの名無しさん
07/10/27 10:21:53
>275
if文の中身間違えてない?

277:デフォルトの名無しさん
07/10/27 10:30:11
>>269
あまりにもスレタイトルに沿ったコードだったからレスつけるまでもないと思った。

278:デフォルトの名無しさん
07/10/27 10:50:13
>>275
コンパイラによっても違うな。さすがゴミクズ撒き散らすマイクロソフトって感じだ。

C:>bcc32 test.cpp  【borlandのコンパイラ】
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
警告 W8060 test.cpp 5: おそらく不正な代入(関数 main() )  【警告が出る】
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland


C:>cl test.cpp  【マイクロソフトのコンパイラ】
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

test.cpp
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
                   【警告は出ない】
/out:test.exe
test.obj

279:276
07/10/27 10:55:07
間違った;ごめん

280:デフォルトの名無しさん
07/10/27 11:02:33
>>278
cl は /W4 で使うもんだ。
gcc は最低でも -Wall で使うもんだ。

281:デフォルトの名無しさん
07/10/27 11:11:33
おれ定数左派だけど定数を左におく場合の欠点って何?
可読性落ちる?
でも落ちるか?
慣れてないとえっ?って思うかもしれないけど別にそれぐらい大丈夫でしょ。
javaでも
"hoge".equal(var);
ってイディオムあるぐらいだし。

lintなんて毎回通さないし、コンパイラの警告も丸カッコついてるとスルーされるし。
(論理式で繋がってたり、マクロが絡んだりすると丸カッコつく場合があるよね)
あとたまたま警告を見過ごしてオブジェクトファイルになってしまうと、次にファイル更新しないと警告でないよね。
おれ注意散漫だから1年に2、3度ぐらいは==と=の間違いやってしまうけど定数左のおかげで早期発見できてるよ。

もちろん定数右でもコンパイラの警告で見つかってるかもしれないけど
定数左にして損はなしと思うから昔から今までずっとそのスタイル。

282:デフォルトの名無しさん
07/10/27 11:16:37 BE:789120656-2BP(125)
ソースファイル内でそのスタイルで統一されてるなら、別に定数が右だろうが
左だろうが、個人の好みだからいいと思うけどなあ。

会社とかで、規約がちゃんとある場合は別で。

283:デフォルトの名無しさん
07/10/27 11:22:03
C:\test>cl /W4 test.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

test.c
c:\test\test.c(7) : warning C4706: 条件式の比較値は、代入の結果になっています。
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.

/out:test.exe
test.obj

>>278
clでもちゃんと警告出るじゃねぇか

284:デフォルトの名無しさん
07/10/27 11:25:11 BE:1473024487-2BP(125)
gccも-Wallつけないと警告でないね。
まあ、普通は付けてると思うけど。

285:デフォルトの名無しさん
07/10/27 11:37:51
>>282
スタイルには単に好みの問題と、実際にメリットのあるものとがある。
前者は ifの条件式の後に中カッコつけるか、改行してからつけるか、など。
後者はif のあとには必ず中カッコをつける、など。
定数左は後者だと思う。(可読性に問題はないと思うので)

286:デフォルトの名無しさん
07/10/27 11:52:10
>>282
「統一されてればいい」ってことなら、あえて少数派のスタイルを選ぶことはないんじゃないの? >>72



287:デフォルトの名無しさん
07/10/27 12:10:59 BE:526080454-2BP(125)
>>285
定数左は確かに代入によるバグを防げるときもあるけど、
その反面、慣れないとぱっと見てわかりづらいよね?

例えば、代入文は
x = 0;
などと書くわけで、大抵の文は左から右に読んでいく。
そして、定数は右にある。これへの慣れが強いので、
if(0 == x)などと書かれると、ここで思考が停止してしまう。

ソースコードの理解しやすさ(可読性?)も考えると、トレードオフで
どちらを選ぶかは個人の趣味レベルになるのかなあと。
上で議論されてるように、コンパイラとかで容易にチェックできるわけだし。

288:デフォルトの名無しさん
07/10/27 12:12:39
コーディングスタイルに拘りすぎる奴はヘタクソ
コーディングスタイル論争に突入する奴はさらにヘタクソ

289:デフォルトの名無しさん
07/10/27 12:15:18 BE:1262592386-2BP(125)
>>286
少数派ではあるけれども、>>285の言うようにチェッカとかを使わなくても
ミスに気づくことができるという利点があるので選ぶんだろうね。

ちなみに漏れは定数は右派。
右におくソースがほとんどだし、慣れてるし。



漏れが見たオープンソースなソフトウェアのソースは定数が右にあった。
もし、定数が左にあることにもっと優位な点があるなら、とっくに
ほとんどのソースが定数左になってると思うんだけど、いかがだろう。

290:デフォルトの名無しさん
07/10/27 12:49:32
とヘタクソ厨がもうしております

291:デフォルトの名無しさん
07/10/27 12:57:03
>>281
主語と目的語の区別がつかないアホには
自然言語からやり直せといいたい。

292:デフォルトの名無しさん
07/10/27 13:05:06
読む分にはどっちでもいい。何の違いもない。
書くときはsubject == compareの方が流れ的に書きやすい。

293:デフォルトの名無しさん
07/10/27 13:50:50
288の書いたコードは汚そうだな。


294:デフォルトの名無しさん
07/10/27 14:23:51
おまえら…。

【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'

【結果発表】
パッ   パッ   パッ    パッ   パッ    パッ
 [チラ]  [シの]  [裏に]  [書き]  [やが]  [れ!]
  ∥∧,,∧ ∥∧,,∧ ∥∧,,∧ ∥∧,,∧ ∥∧,,∧ ∥∧,,∧
  ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`)
   (    ). (    ). (    ) (    ) (    ) (    )
   `u-u´  `u-u´   `u-u´  `u-u´  `u-u´  `u-u

295:デフォルトの名無しさん
07/10/27 14:31:10
if(*dst++ = *src++){
hogehoge
}

みたいなとき警告でないようにしたいのですが


296:デフォルトの名無しさん
07/10/27 14:33:15
if((*dst++ = *src++) != 0){


297:デフォルトの名無しさん
07/10/27 15:11:01
もうね、コーディングスタイルスレでも立ててそこでやれと

298:デフォルトの名無しさん
07/10/27 15:40:13
しかし、無茶苦茶な低能が居たものだな...
if (!strcmp(str1, str2)){}
は、知らない者に対して、文字列が等価で無いこと比較しているような誤解を与えることがあるので好ましくは無いだろう
では、
if (strcmp(str1, str2) == 0){}
これはどうだろうか?
この場合、!strcmp()よりも悪化していると言える
本質的な問題を解決していないからである
しかも、余分に入力した上で、知らない者に対し更なる誤解の種をまいていると言えるからである

故に、C FAQでは、
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
と言うマクロを用意することで
if (Streq(str1, str2)){}
と記述させる事により、文字が等価であることを比較している事を判りやすくしましょうと書いているのだ

つまり、定数を左に置く正当の理由とは言えない
その上、彼の主張の一つである、定数を左に置くことで、何と比較しているのか判りやすくなると言う弁からすると
"文字列が等価では無いことを調べている"ように強調されてしまった駄目なコードの例と化しているのである

彼は、これを大まじめに、こちらの方が判りやすいと言っているが、どう考えても、判りにくなっていると思われる


299:デフォルトの名無しさん
07/10/27 15:41:35
わかったから月曜になったらちゃんとハロワ池よ

300:デフォルトの名無しさん
07/10/27 15:54:07
;`;:゙;`(;゚;ж;゚; )ブフォッ!

301:デフォルトの名無しさん
07/10/27 16:04:59
strcmpでの定数の右左に関して言えば、圧倒的に右だろう。
if (strcmp(str1, str2) < 0)

を読むとき、不等号が見たままの形として利用できる。
つまり、 str1 < str2 として直感的に理解することができる。

同様の条件を右定数で書くと、
if (0 > strcmp(str1, str2)) となって、見たままの直感と反してしまう。

そのつどリファレンスを引いたりしたくないし、
機械的に右へ書いてしまう習慣は役に立つ。

302:デフォルトの名無しさん
07/10/27 16:05:07
できる奴ほどスタイルにこだわる

303:デフォルトの名無しさん
07/10/27 16:14:56
大きいほうを右に配置したいし、常にそうするから、
結果的に不等号の「>」は不要だと思うんだよなぁ。

勿論、流儀の問題でぶつかったりする心配はあるけど、
そうじゃなくて自分ひとりで「>」無しでやっていくうえで、
どうしてもでてくる不都合ってあるのかな?
「<」じゃ困ってしまうような事態があるのかな?

チラシの裏にでも書いておけって? すまんね。

304:デフォルトの名無しさん
07/10/27 16:31:17
だれか、288を日本語に翻訳してくれ。

で、実際のところ、定数は左に置けとか頑張ってるのって、一人だけだろ?


305:デフォルトの名無しさん
07/10/27 17:26:57
>>301
それは「定数を左辺に」と主張している派の本質と話題をそらせて釣りだと思うけど

306:デフォルトの名無しさん
07/10/27 17:28:27
ぱっと見て「バカだなぁ」と思うコード

307:デフォルトの名無しさん
07/10/27 18:09:07
スレスピードがきもいよお前ら

308:デフォルトの名無しさん
07/10/27 18:14:17
いまム板で一番勢いがあるスレだぜここは

309:デフォルトの名無しさん
07/10/27 18:15:40
昨夜から今朝にかけての速度はもう、ある種の祭りだった。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch