ぱっと見て「ヘタだなぁ」と思うコード その6

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名

過去スレ
その5: http://pc11.2ch.net/test/read.cgi/tech/1155315371/
その4: http://pc8.2ch.net/test/read.cgi/tech/1153312202/
その3: http://pc8.2ch.net/test/read.cgi/tech/1149986051/
その2: http://pc8.2ch.net/test/read.cgi/tech/1142741989/
初代 : http://pc8.2ch.net/test/read.cgi/tech/1141867015/
2デフォルトの名無しさん:2007/10/25(木) 03:50:58
余裕の2GET
3デフォルトの名無しさん:2007/10/25(木) 03:52:31
そして、1乙。
4デフォルトの名無しさん:2007/10/25(木) 08:59:17
アホが群がって自分の趣味をぶつけ合うだけの糞スレイラネ
5デフォルトの名無しさん:2007/10/25(木) 10:48:00
>>1
左定数も禁止ネタに入れとけよ
6デフォルトの名無しさん:2007/10/25(木) 10:50:46
if(0 == a)
はでメリットがない上に明確なメリットがある以上
やらない奴は低能。
7デフォルトの名無しさん:2007/10/25(木) 10:56:03
>>6 シンプルかつ充分な燃料おつw
8デフォルトの名無しさん:2007/10/25(木) 10:57:01
・memset
・malloc - free

の禁止ネタって何だ?
9デフォルトの名無しさん:2007/10/25(木) 12:32:55
KENT-WEBのスクリプト全般
10デフォルトの名無しさん:2007/10/25(木) 15:27:37
if( a == 0 ){}

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

判りやすく、C++で解説するならば
前者は
if ( a.operator==( 0 ) ){} // オブジェクトaの==メソッドの呼び出し
であり
後者は、
if ( operator==( 0, a ) ){} // グローバルな==関数の呼び出し
となるからである
11デフォルトの名無しさん:2007/10/25(木) 15:29:07
ヘタな実装前提にして叩くなよw
12デフォルトの名無しさん:2007/10/25(木) 15:43:23
バカか
>>10は左定数擁護派だ
13デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 17:51:51
>>13
> 過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
ありがとううう!! そういう具体的な情報は嬉しいね。

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

↑禁止ネタにこういうレスしたらダメでしょうか?わかりません><
15デフォルトの名無しさん:2007/10/25(木) 17:53:02
決め付けたら、余計荒れるだろ
16デフォルトの名無しさん:2007/10/25(木) 18:13:18
暗黙の宣言は利用しないと言う原則から行けば
memsetはした方がいいし、できる限りfreeする方がいいだろう

しかし、定数は右に置くべきだろう
17デフォルトの名無しさん:2007/10/25(木) 18:18:45
何かやっておきたいのならchar *p;*p = '\0';で充分では。
18デフォルトの名無しさん:2007/10/25(木) 18:20:58
char *p = malloc(size);*p = '\0';な。突っ込まれるまえに。
19デフォルトの名無しさん:2007/10/25(木) 18:25:06
>>18
その書き方なんか気持ち悪いんだけど...

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

の方が好き
20デフォルトの名無しさん:2007/10/25(木) 18:45:30
スルー力が試される昨今、みなさんいかがお過ごしですか
21デフォルトの名無しさん:2007/10/25(木) 18:57:23
スルーするくらいなら居ないほうがマシだぞ
22デフォルトの名無しさん:2007/10/25(木) 19:54:22
>>20
スルー力って、新種のイカかと思った
23デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/25(木) 20:12:56
>>23
お前がな!
(顔ズレてるじゃんよ)
25デフォルトの名無しさん:2007/10/25(木) 20:24:26
悪くないスレの出だしだ。
26デフォルトの名無しさん:2007/10/25(木) 20:44:10
Win32APIの糞でかい構造体の全てのフィールドにいちいち0だの'\0'だのを突っ込んでる奴はマゾ
27デフォルトの名無しさん:2007/10/25(木) 21:25:46
ダメだ、我慢ができないw

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

コンパイラの最適化で*p='\0';と同じコードを吐いてくれるようになるのかな??
28デフォルトの名無しさん:2007/10/25(木) 21:29:24
>>13
> 過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
fj.lang.cの時は、プロセス終了時にmallocで確保したメモリを開放しない(できない)OSもあるから、main()終了直前でもfreeしたほうがいい、って結論だった記憶が。
今でもwindowsだと信用ができない。
29デフォルトの名無しさん:2007/10/25(木) 21:37:48
そんなOSあっていいの?w 特殊な環境?
30デフォルトの名無しさん:2007/10/25(木) 21:49:26
>>28
fjで結論なんて出るわけないだろ。

31デフォルトの名無しさん:2007/10/25(木) 22:31:57
>>27
いや、*p='\0';だと、馬鹿な奴が、*p="Init Strings";とかやってくれそうで...
32デフォルトの名無しさん:2007/10/26(金) 00:15:42
char month[] = "Jan\0Feb\0Mar\0…Dec\0";

Decの後の\についてはスルーするとして、こういうのってどうよ
33デフォルトの名無しさん:2007/10/26(金) 00:18:17
>>32
埋め込むなら、
char *month[] = {"Jan", "Feb", ・・・, "Dec"};
でいいじゃねえかと言いたくなります。
34デフォルトの名無しさん:2007/10/26(金) 00:48:36
>>31
それ、後者はコンパイル通らないよ。
35デフォルトの名無しさん:2007/10/26(金) 01:40:17
>>29
仮想記憶の無いOSもある
ex.DOS
ex.ITRON
アプリケーションが死ぬ時にOSも道連れなら別にかまわんが、違うだろう?
36デフォルトの名無しさん:2007/10/26(金) 01:48:40
つーか最近の若いもんはそんなことも知らないんだな。
37デフォルトの名無しさん:2007/10/26(金) 01:56:53
>>34
そういうばか者は、要らない工夫をするから怖いよ〜♪
しなくていい工夫はするのに、しなきゃいけない工夫をしないんだ...orz
38デフォルトの名無しさん:2007/10/26(金) 02:01:32
>>37
コーディング規約でいくら縛っても縛っても、とんでもないコード書いてくるよな。
逆に言えば、コーディング規約でどうにかなる程度の問題なんて、初めからどうでも良い。
つまり、コーディングスタイルなんて、どうだっていいって事だな。
縛ろうと思えば、いつでも縛れるんだから。
39デフォルトの名無しさん:2007/10/26(金) 02:17:01
>>38
>縛ろうと思えば、いつでも縛れるんだから。

いつでも縛れるからといっても、単体試験も終わろうかという時にコーディング規約を
変更するのは無しだろ、、、
40デフォルトの名無しさん:2007/10/26(金) 02:17:06
だから、いくら人手不足とはいえ、使えないカスはプロジェクトから追い出したほうがいいんだよね。
41デフォルトの名無しさん:2007/10/26(金) 02:29:11
>>39
そりゃ途中で変更は出来んだろうな。
だけど、コーディングスタイルは縛ろうと思えば縛れるんだから、全然いいんだよ。
むしろ問題は、どうやっても縛ることのできない、糞コードの方。
網の目をかいくぐるように余計なことをする。
42デフォルトの名無しさん:2007/10/26(金) 02:54:10
strcpyで初期化すれば、NULL以外で初期化しなければならなくなったときに、最小限の変更で済むし
自分以外がその変更をする場合でも恐らく大丈夫だろうと思われる
*p = '\0';では、>>31みたいな変更をされた挙げ句、>>37な奴で、結果mallocした領域を駄目になって謎のエラーに悩むはめに...

猫の手を借りるためには、猫に理解できるコードを書かなければならない...orz
43デフォルトの名無しさん:2007/10/26(金) 03:10:13
猫用マクロセットが必要だな
44デフォルトの名無しさん:2007/10/26(金) 10:35:48
>>42
NULLと'\0'(NUL)は違うっていうのはわかってるよね?

いちよう。
45デフォルトの名無しさん:2007/10/26(金) 10:36:48
コーディングスタイルにこだわらない奴は、下手
46デフォルトの名無しさん:2007/10/26(金) 14:09:32
>>44
たぶん、判ってるよぅ(^-^;

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

*p = '\0';にしてんじゃん...
判ってなきゃ、*p = NULL;にするし...
47デフォルトの名無しさん:2007/10/26(金) 14:21:33
ひとりだけ、超絶低レベルな奴が紛れ込んでる
48デフォルトの名無しさん:2007/10/26(金) 14:23:11
>>19
いくらなんでも、それは無い
49デフォルトの名無しさん:2007/10/26(金) 14:24:03
ストリコンペ!
50デフォルトの名無しさん:2007/10/26(金) 15:12:13
今来た。
もう終わったけど、if (定数 == 変数)の話がC FAQに載ってることに誰も言及しなかったのが不思議。
三田テンゲンは、C FAQから持ってきたか、comp.lang.cをwatchしてたかのどっちかじゃないかな。
51デフォルトの名無しさん:2007/10/26(金) 15:14:27
こんなところで必死に10年前のネタ戦わせてる奴はもっと充実した趣味を探せといいたいね。
何もないならWiiFitでも買ってたるんだ腹でも引っ込めたらどうだw
52デフォルトの名無しさん:2007/10/26(金) 15:19:05
if (定数 == 変数)はいろんな本に載ってるぞ
53デフォルトの名無しさん:2007/10/26(金) 15:47:54
その本は買うべきじゃないという、良い指針になる
54デフォルトの名無しさん:2007/10/26(金) 15:48:56
Wiiはありえない
55デフォルトの名無しさん:2007/10/26(金) 15:49:06
良い本かどうかを見分けるのは実に簡単。
ASSERTの説明が入っているかどうか。
56デフォルトの名無しさん:2007/10/26(金) 15:58:14
ASSERTの説明がなくても良い本はあるだろ、常考
57デフォルトの名無しさん:2007/10/26(金) 16:01:21
代入防止に使うと言うのは、変数同士だと意味がなくなるので、==で比較する癖をつけることが望ましい

変数を何と比較しているのか判りやすくするってのは、当該関数の中で、その定数が比較対照になることは決まりきっているので、態々定数を先に持ってくる意味はない
当該関数で、比較に用いられる定数がなんなのか判りにくいのであれば、それは、関数が適切に作られてはいないことを意味するのでは無いだろうか?
また、どうしても定数を最初に出さなければ何を調べてるのか判らないような場合は、if文ではなく、switch文を使用する方が適切なのではないだろうか?
58デフォルトの名無しさん:2007/10/26(金) 16:07:25
え、まだやる気?
59デフォルトの名無しさん:2007/10/26(金) 16:09:10
まあ大盛況だからなww
60デフォルトの名無しさん:2007/10/26(金) 16:22:45
>>57
だからクビになるんだよ
はやく次の仕事見つけろよ
61デフォルトの名無しさん:2007/10/26(金) 16:36:06
>>60
自己紹介乙!
62デフォルトの名無しさん:2007/10/26(金) 17:44:27
> 代入防止に使うと言うのは、変数同士だと意味がなくなるので、==で比較する癖をつけることが望ましい

これの意味がさっぱり分からない…。何の話をしようとしているのかさえ分からない。
63デフォルトの名無しさん:2007/10/26(金) 18:03:48
代入防止ってのは if(a=1) とかの事だろ
ほんとは if(a==1) と判定したかった
でも if(1=a) こうすればコンパイル時に忘れてても分かる

ところが変数同士の比較 if(b=a) はどうしようも無い
というお話
64デフォルトの名無しさん:2007/10/26(金) 18:08:23
(定数左にする癖をつけるよりは)==で比較する癖をつけることが望ましい

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

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

そんなのは既出どころかスタート地点であって、その上で、
「せめて定数の場合の代入だけは検出できるようにしよう」
ってのが定数左派の主張では?
いつも役に立つ、ではなくて、役に立つ場合があるから左に書く、と。
65デフォルトの名無しさん:2007/10/26(金) 18:10:11
というより、

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

これは、そもそも左も右もねぇ!
66デフォルトの名無しさん:2007/10/26(金) 18:13:30
てかこのレヴェルのバグを防ぐのに四苦八苦してる奴って何やってる人?
67デフォルトの名無しさん:2007/10/26(金) 18:35:13
左へ受け流す〜
68デフォルトの名無しさん:2007/10/26(金) 19:51:18
左定数は、==を=と記述ミスした場合に検出できる利点あり。
右定数が左定数より優れている点って何?
69デフォルトの名無しさん:2007/10/26(金) 19:52:16
operator のオーバライドが中途半端なときに死ねる
70デフォルトの名無しさん:2007/10/26(金) 19:56:28
71デフォルトの名無しさん:2007/10/26(金) 20:01:38
>>68
警告でるから、その利点いらね。
72デフォルトの名無しさん:2007/10/26(金) 20:11:59
google code search でググってみると.。

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

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

特に利点もないのに、圧倒的少数派のスタイルを選んでる時点でヘタクソ臭が。
73デフォルトの名無しさん:2007/10/26(金) 20:21:45
>>50
C FAQに載っているけど、それは定数左置きにダメ出ししているってことを理解できてるか?
74デフォルトの名無しさん:2007/10/26(金) 20:25:53
>>72
デブ専、ブス専、フケ専、ハゲ専なんかと同じ人種なんだろう。

自分の感覚が世間とずれていることを認めたがらない。
75デフォルトの名無しさん:2007/10/26(金) 21:55:50
雀の涙ほどのどうでもいいメモリを節約するために
テンポラリ用の奇怪な共用体を使い回したりダミーデータの隙間を拝借したりするような奴にはどう言ってやればいいと思いますか
メモリ節約すること自体は大切だし
76デフォルトの名無しさん:2007/10/26(金) 21:58:14
そんなしょぼい省メモリ化と可読性、開発効率とのトレードオフは成立しないといってやれ。
77デフォルトの名無しさん:2007/10/26(金) 22:16:11
配列とかで大量にデータを取ったりしてるわけじゃなくて、タダの作業用のローカル変数とか
引数をshortにしてるコードとかもあるな。
よっぽど気をつけてコードを書かないと、すぐintへ変換するコードがはいるから、それで、節約した
2バイトなんて簡単にとぶ。
アライメントの問題もあるな。
78デフォルトの名無しさん:2007/10/26(金) 22:16:18
いつも他人のコードを見ては『このコードだと遅い』とか文句つけるジジイと一緒だな
そのくせプロファイラの使い方すら判らないとか
79デフォルトの名無しさん:2007/10/26(金) 22:39:36
入力がshortの範囲なら引数の型をshortにするのは普通じゃね?
数バイトでも節約したいとか実行速度がシビアだったりしなければ。
80デフォルトの名無しさん:2007/10/26(金) 22:43:44
>>72
"== NULL"
"NULL =="
こんなの多数決で考える頭はもうちょっと働かせたほうがよい

if(変数 = NULL)

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

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

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

これはただの忠告。>>72はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
プログラミングの先生だって×は出さないだろうしなw
81デフォルトの名無しさん:2007/10/26(金) 22:45:53
>>80
ええ? そのバグを防ぐ方法を知らないの?
こういう話のときには必ずでるのに。。。
基礎の基礎だよ。
82デフォルトの名無しさん:2007/10/26(金) 22:49:59
>>80
そんなもんコードチェッカーにかければすぐ見つかるだろ。
まさかコードチェッカー使ってないのか?
83デフォルトの名無しさん:2007/10/26(金) 22:50:11
Pythonを使えばよい
84デフォルトの名無しさん:2007/10/26(金) 22:53:50
>>82
フツーに警告出ないようにコードを書いてるだけで防げるな。
警告出さないようなコンパイラはコードチェッカを使うか、捨てるべきか、悩むこところ。
85デフォルトの名無しさん:2007/10/26(金) 22:57:32
>>80
> こんなの多数決で考える頭はもうちょっと働かせたほうがよい 

コーディングスタイルなんて、よっぽどのセンスと見識があるやつ以外は、自分で考えたりしないで、
一般的なものに従うほうがいいよ。
(どうしてそういうスタイルになっているか、それ以外ではいけないか、考察したりするのは勉強になるけど)
86デフォルトの名無しさん:2007/10/26(金) 22:59:39
てか、=と==を間違うや奴って、そんなに多いのか?

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

しかし、これは真実w

>>79
実行速度なら、shortよりintの方が有利のはず。
87デフォルトの名無しさん:2007/10/26(金) 23:01:09
>>80
警告を無視する習慣があることはよく分かった
その悪習を直すほうがよっぽどいいよ
8879:2007/10/26(金) 23:06:04
>>86
>実行速度なら、shortよりintの方が有利のはず。

だからそう書いてるだろ。よく嫁。
8980:2007/10/26(金) 23:26:14
ごもっとも。ちなみに、コードチェッカー自体忘れてたよw

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

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

もっとも、バージョン管理はCVSで一瞬で済んでしまうが
9080:2007/10/26(金) 23:28:40
>>87
は?警告は全部潰してますが。
どこを縦読みした?wwwww
91デフォルトの名無しさん:2007/10/26(金) 23:29:00
> 数バイトでも節約したいとか実行速度がシビアだったりしなければ。
ん?
「数バイトでも節約したい」とか「実装速度がシビアだったりしなければ」{shortを使う}って読ませたいのか?
(「数バイトでも節約したい」とか「実装速度がシビアだったり」)「しなければ」{int}って読めるぞ。
人のことを言う前に、ちゃんとした分かりやすい日本語を書け。
設計書や資料を作るときの基本だろ?
92デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/26(金) 23:30:23
80はどこの社員だ?
そこだけには仕事は頼まないようにするから、教えてくれ。
94デフォルトの名無しさん:2007/10/26(金) 23:31:00
制御文の代入で警告でないってどこのコンパイラ使ってるの?
95デフォルトの名無しさん:2007/10/26(金) 23:32:41
>>89
アホなコンパイラ使ってるなら、せめてlintとか使えよ。
こわー。

96デフォルトの名無しさん:2007/10/26(金) 23:33:07
「プログラミングの先生」とか言っちゃってる時点で、学生確定
9779:2007/10/26(金) 23:38:15
>>91
・普通はshortを使う。
・数バイトでも節約したい場合は>>77のようにintを使った方がよい場合もある。
・実行速度がシビアならintを使った方がよい。

という意味のつもりで書いたが分かりにくかったか。
98デフォルトの名無しさん:2007/10/26(金) 23:40:01
>>80
> が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
最悪、ホワイトボックスの分岐網羅カバレッジ100%のテスト段階で見つかるわけだが。
それより早く見つかったほうがコストが安いから、どうしようという話。
で、ちゃんとしたコンパイラかlint使えって結論。
9980:2007/10/26(金) 23:41:10
>>92
何のデモか知らないけど、わざわざ-Wallで例示するなんてヒマなんだね。

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

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

>>96
妄想強すぎ
100デフォルトの名無しさん:2007/10/26(金) 23:41:24
>>89
コードチェッカの類を使ったことないだろ。
101デフォルトの名無しさん:2007/10/26(金) 23:41:48
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ     >>80
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
102デフォルトの名無しさん:2007/10/26(金) 23:42:42
>>97
ループ変数に、いつもshort iとか書いてるのか?

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

どんだけ情報弱者なんだよ・・・
104デフォルトの名無しさん:2007/10/26(金) 23:45:03
>>80 は Lattice C 使ってるとか?
10579:2007/10/26(金) 23:46:50
>>102
>>79に引数って書いてるだろ
106デフォルトの名無しさん:2007/10/26(金) 23:47:00
>>99
おまえの、定数を左にもってくるってのも、コーディングスタイルじゃなくて、コンパイラに頼って
バグを見つけるって発想だろ。 >>80
警告出るから、そんなことしなくていいってがコンセンサスになってるから >>72 みたいな結果になるわけよ。
107デフォルトの名無しさん:2007/10/26(金) 23:49:29
if (定数 == 変数)と書くコーディングルールがある会社、ということで、技術力が低い会社だと
レッテルを貼られるリスクを考えたことがないようだ。
108デフォルトの名無しさん:2007/10/26(金) 23:50:08
このスレにぴったりのネタ会社だ
10980:2007/10/26(金) 23:54:01
>>100
コードチェッカーの類?最近は全くないね。
VC++6、VS2005、gcc3.4.4などまあ常識の範囲内のコンパイラ
最近はやむを得ずSDCC使ってるけど、エンバグすら直ぐ分かっちゃうのでlint通す意味ナシ。
110デフォルトの名無しさん:2007/10/26(金) 23:54:52
>>79
普通じゃない
111デフォルトの名無しさん:2007/10/26(金) 23:55:36
>>109
日本語でOK
112デフォルトの名無しさん:2007/10/26(金) 23:57:28
>>80
if (0 = a)はコンパイラに任せるのに、その他の複雑なバグが簡単に見つかるコードチェッカーは使わないと?

わけわからん
113デフォルトの名無しさん:2007/10/26(金) 23:59:10
>>109
コードチェッカの意義とか理解してないっぽいな。。。
114デフォルトの名無しさん:2007/10/26(金) 23:59:26
言い訳するにしてももうちょっと熟考すればいいのに
115デフォルトの名無しさん:2007/10/27(土) 00:00:09
>>80
なんか必死だけど、どれだけ言葉を重ねても、レベルが低いことを証明することになるだけだぞ。
116デフォルトの名無しさん:2007/10/27(土) 00:00:35
>>107
ほう、そんなリスクがあっても引く手あまたのウチの会社って凄すぎるってこと?wwww

>>106
どういたしまして。負け犬の遠吠えと受け取っておきますm(_ _)m
117デフォルトの名無しさん:2007/10/27(土) 00:01:29
>>112
コードチェッカが無意味なくらい完璧にコードを書けるなら、定数を左にもってくるとか、
姑息なテクニックを使わなくてもいいよな。
118デフォルトの名無しさん:2007/10/27(土) 00:03:08
コードレビュー文化があって、コードチェッカーが使える環境なら、最初は使ってて
使わなくなるなんて考えられない。

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

つまり、部下のミスを見つけてなんかいないってこった。
あ、部下がいないという線もあるな。
119デフォルトの名無しさん:2007/10/27(土) 00:04:48
タコなコードチェッカーだったからうざくて使うのやめたってならわからなくもない
120デフォルトの名無しさん:2007/10/27(土) 00:05:35
コードレビューなんてしてないんだろ
121デフォルトの名無しさん:2007/10/27(土) 00:06:44
このスレで>>80が頑張る意味がわからない
122デフォルトの名無しさん:2007/10/27(土) 00:07:03
右定数を見つけると最高レベルの警告を出す80謹製コードチェッカだったら使わなくなるかもしれない
123デフォルトの名無しさん:2007/10/27(土) 00:07:24
コンパイラがどういうときに警告出すかとか知らないってのもどうかなぁ。
コーディングルールを守ってるから、警告でなくて知らないって話だけど、
そういうのは教条的に守るんじゃなくて、どうしてそうなってるかとか考えたほうがいいよ。
124デフォルトの名無しさん:2007/10/27(土) 00:09:43
>>121
自分がレベル低いなんて夢にも思ってなかったから、現実を突きつけられて自我の危機に陥ってる。
125デフォルトの名無しさん:2007/10/27(土) 00:12:01
定数が左ってのは、警告を出してくれるコンパイラやまともなコードチェッカーが無かった時代の名残だよな。
今ではまるで意味が無い。
126デフォルトの名無しさん:2007/10/27(土) 00:12:16
if (定数 == 変数)なんて、いわゆる「バカよけのテクニック」だからね。
それを使っているからといって、声高に自慢するようなことではない。
127デフォルトの名無しさん:2007/10/27(土) 00:13:59
前スレだかで馬鹿にしすぎたからムキになっちゃったんだろ。
お前ら自重しろ。
128デフォルトの名無しさん:2007/10/27(土) 00:14:08
袋叩きwww
129デフォルトの名無しさん:2007/10/27(土) 00:15:42
80は、左に置きたいから置いているようにしか思えない。

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

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

130デフォルトの名無しさん:2007/10/27(土) 00:19:37
>>123
・この警告は出るのが当たり前、気にするな
・この警告は出てもいいけど本当に大丈夫かチェック汁
・この警告出したバカは氏ね
みたいに警告のランク分けとかするよね。
131デフォルトの名無しさん:2007/10/27(土) 00:20:02
単に後に引けなくなってるだけだろ。
132デフォルトの名無しさん:2007/10/27(土) 00:23:50
>>129
> それは右に置いてもコンパイラの警告が出るので互角(散々既出)。

単にこれを知らないだけだと思うよ。
133デフォルトの名無しさん:2007/10/27(土) 00:24:11
私はコードチェッカというものをいままで使ったことがありません
そんなに有効なものですか?

有名なものではどんなものがありますか?
134デフォルトの名無しさん:2007/10/27(土) 00:27:49
OSと言語は?
135デフォルトの名無しさん:2007/10/27(土) 00:30:19
>>133
ttp://www.swtest.jp/tools.html

静的解析ツールでぐぐれ
136デフォルトの名無しさん:2007/10/27(土) 00:32:31
べつに必要としているわけではなくてどのようなものか知りたいので
何でもいいですが、自分の普段の仕事ではWindowsでC++です
Cygwinも常用しているのでUNIX系でも試せると思います
137デフォルトの名無しさん:2007/10/27(土) 00:36:39
どんなものか知りたいなら、Cygwinでcheckをインストールして、Cで怪しげなコードを書いてチェックしてみろ。
138デフォルトの名無しさん:2007/10/27(土) 00:37:42
間違えた。checkじゃなくて、splintだ。
139デフォルトの名無しさん:2007/10/27(土) 00:41:10
WindowsのC++なら、ここから体験版をゲットするんだ。
ttp://www.techmatrix.co.jp/products/quality/download/index.html
140デフォルトの名無しさん:2007/10/27(土) 00:41:52
ぱっと見て「ばかだなぁ」という奴を相手にしなくていいから、
「ヘタだなぁ」と思うコードを貼ってくれ。
141133:2007/10/27(土) 00:42:06
>>135
あ、QACとかのことですか
使ったことはないけどプレゼンは受けたことがあります

そのときは、馬鹿に使わせるのは怖いツールだなと思いました
142デフォルトの名無しさん:2007/10/27(土) 00:43:28
C++用のフリーな静的解析ツールは知らないなぁ・・・
143デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 00:47:21
長文お疲れだけど、それみんなもう知ってるから・・・
146デフォルトの名無しさん:2007/10/27(土) 00:55:08
>>116
うん、君の会社が凄すぎるから、下民たちの為に会社名を教えてくれ。

> 警告は全部潰してるよ。
コンパイラの設定を変更して、特定の警告は表示させないようにしたのか?
147デフォルトの名無しさん:2007/10/27(土) 00:56:08
「みんな」 に 80 は含まれていないが。
148デフォルトの名無しさん:2007/10/27(土) 01:00:53
>>144
何を問題にしているのか分からないけど。
if (result == true)を気にしているのだとしたら、全員にメールでも出したら?
一番いいのは、タコなコードを書く奴は、片っ端からプロジェクト外に追放することなんだけど。
それをやったら、誰も残らなかったなんてのが笑い話じゃなくなるからな。
149デフォルトの名無しさん:2007/10/27(土) 01:02:49
>>144
b-a が0〜2ならOK,それ以外ならNGを出力ってこと?
不等号演算子とか教えるといいんじゃないかな。
150デフォルトの名無しさん:2007/10/27(土) 01:05:15
どうしようもなく汚いコードのところで仕事をしたとき、警告がでまくったけど、
ま、こんなもんかと思って、放置しておいたら、上のヒトの目にとまって、
警告が出てるじゃないかと注意されてしまった。

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

仕方ないので、makefileを書き換えて、警告を全部抑制した。
151デフォルトの名無しさん:2007/10/27(土) 01:05:37
つまり

if (b - a < 3)
OK;

ということでしょ
境界の辺が自信ないが
152デフォルトの名無しさん:2007/10/27(土) 01:19:53
>>151
b<aだとダメじゃね?
153デフォルトの名無しさん:2007/10/27(土) 01:20:11
プロトタイプ宣言はK&Rにはできないんじゃないだろうか
154デフォルトの名無しさん:2007/10/27(土) 01:22:32
それは当然 else 節を省略したのですけど
そういうことではない?
酒が入ってるので不安
155デフォルトの名無しさん:2007/10/27(土) 01:26:07
>>153
ああ、そうだっけ。

int hoge();

みたいに、戻り値だけで、引数のないプロトタイプだった。
156デフォルトの名無しさん:2007/10/27(土) 01:31:26
それは多分C言語的には完全に合法なので警告のほうがうざいと思う

先に宣言が

int f();

とあって後で定義が

int f(int a) { ... }

とANSIならばエラーエラーかな?
うろ覚えでごめん
157デフォルトの名無しさん:2007/10/27(土) 01:33:18
>>80の所属している会社を大胆予想。
仕事は来ていて技術力は無いという辺りから、
・富士通
・日立
・NEC
の関連会社を予想。

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

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

#JAVAのswingで画面を作っているんだけど、クラス図もイベントトレース図も存在しないって、此の先木大丈夫なんだろうか。
158デフォルトの名無しさん:2007/10/27(土) 01:39:31
> 80 名前: デフォルトの名無しさん [sage] 投稿日: 2007/10/26(金) 22:43:44
から3時間足らずで約70レスか。
このペースで行けば、39時間かからずに埋め立て完了か。
今までの過疎化が嘘のようだなw
159デフォルトの名無しさん:2007/10/27(土) 01:41:01
>>148
レビューしてすら、さくっとスルーされそうなことはわかりますた。
>>149
yes. 問題は、コレと同レベルのコードがと某社のおひさるなサイト上で動いてたってことなんだ。
さらに恐しいことは、a, bは日付を8桁の整数に変換したものだったりしたんだ……。
>>154
条件式が足りてないれす。こんな感じ?
int d = b - a; if (0 <= d && d < 3) ...
160デフォルトの名無しさん:2007/10/27(土) 01:47:51
というか、何をしたいコードなのか教えてくれないと、144のコードが正しいか間違っているかは判断できないぞ。
161デフォルトの名無しさん:2007/10/27(土) 01:50:10
正しいか間違ってるかの問題じゃなく
冗長すぎるのを問題にしていると思う
162144:2007/10/27(土) 01:59:48
>>159
あ、「日付を8桁の整数に」ってのは、20071027みたいなやつ(YYYYMMDD)のことね。為念。
163デフォルトの名無しさん:2007/10/27(土) 02:02:36
冗長かどうかも、何がやりたいのかが分からないと、何とも判断できないからね。
問題によっては、冗長に見えるやり方が最適解になったりすることもあるし。
164デフォルトの名無しさん:2007/10/27(土) 02:05:19
でもあれはさすがに型も明示されてるし言い逃れようがないでしょ
165144:2007/10/27(土) 02:11:50
>>161
です。冗長過ぎるというより、きっぱりはっきり無駄かつ無意味。
>>160>>163
一般論としてクソコードであると賛同を得られないことに絶望した。
つか、釣りか? 釣りなのか?
166デフォルトの名無しさん:2007/10/27(土) 02:18:21
>>165
このスレになじまない内容なので、あまり興味を持たれなかっただけかと
167デフォルトの名無しさん:2007/10/27(土) 02:18:22
お前が釣ろうとしてるのかと深読みしてしまったよ
168デフォルトの名無しさん:2007/10/27(土) 02:24:40
>>144はこのスレで希に見る良題だと思ったけど
あぁ、希だからか

ちなみに自分は144ではないです
169149:2007/10/27(土) 02:29:03
>>165
俺は賛同するぞ。
簡単な処理をあんなに難しく実装する才能はある意味凄いと思う。
170デフォルトの名無しさん:2007/10/27(土) 02:32:58
if (cond) for (;;) {
} else {
}
とか
for (;;)
 if (cond1)
 if (cond2)
{
}
ってありなの?
171デフォルトの名無しさん:2007/10/27(土) 02:34:06
>レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?
これは質問じゃなくてただの皮肉だったのか
172デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 02:39:46
>>172
関数より定数の方が長い場合もあるわけで
174デフォルトの名無しさん:2007/10/27(土) 02:41:33
>>170
文法的には間違っては無さそうだが、ひどく読みづらいな。
175デフォルトの名無しさん:2007/10/27(土) 02:41:49
>>173
その場合は定数を後ろに書けば良いだろ。
176デフォルトの名無しさん:2007/10/27(土) 02:43:44
>>172の言いたいことがケースバイケースであるなら正解
定数左が当然といってるのなら>>173が正解
177デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 02:51:18
だいたいさ、お前ら良く考えてみろよ。
疲労困憊のときに>>172の後者の文を見て、本当に==NULLを読み飛ばさない自信が有るか?
==NULLはエディタの外に出てしまっていて見えてないかもしれないんだぞ。
必ずスクロールして確かめる自身はあるか?
また、他人が読んだとき、必ずスクロールしてくれる自身はあるか?

そんなリスク背負うぐらいなら、場合によっては定数を先に書いても良いんじゃないか?
コーディングスタイルに拘るあまり、意固地になっちゃってどうするの。
179デフォルトの名無しさん:2007/10/27(土) 02:57:03
つか、Win32APIを使ってる時点で、何と比較するのか判っているのだから、定数が左にある必要は無いと思うが?

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

変な定数と比較するのなら、定数を前に持っていくより、何のためのテストかコメントを残す方が余っ程気が利いている
180デフォルトの名無しさん:2007/10/27(土) 02:59:16
>>177
どこで折り返すかって話になるが、
結局、自分のプログラムが何処で誰に読まれるか判らない以上、
「何列以上になったら折り返す」ということを語るのは難しい。
読み手のエディタのサイズを予測するすべは無い。

それに、どの様な書き方をしても、後に書くものは先に書くものに比べて
目立ちにくいということには変わりない。
条件式の場合は、関数の引数よりも条件そのものの方が大事だから、
大事なものを先に書いちゃおうという視点から、読み手のことを考えれば、
定数は自然と左に出てくる。逆に自分のスタイルを貫けば右に行く。
181デフォルトの名無しさん:2007/10/27(土) 03:02:31
>>179
なんでWin32API限定で話を進めるんだよ。
>>172のどこにもWin32APIに限定しますなんて書いてないだろ。
離散数学の基礎からやり直してください。
182デフォルトの名無しさん:2007/10/27(土) 03:02:42
いや、昔は80桁越えたら折り返すってルールがあったんだが。

マウスの付いてるパソコンしか使ったことの無い世代が増えたなぁ。
・・・しみじみ。
183デフォルトの名無しさん:2007/10/27(土) 03:04:58
>>182
今の人だけど、常識としてちゃんと知ってるよ。受け継がれてるから安心して。
184デフォルトの名無しさん:2007/10/27(土) 03:09:37
それを強制したら老害だけどね
185デフォルトの名無しさん:2007/10/27(土) 03:10:42
>>181
別にWin32API限定でなくても、定数を比べる場合はif文以前に比べる定数は決まってるだろう
自分で作った関数だろうと、人の作った関数だろうと、定数で比較する時点で、どんな定数と比較するのか決まっているじゃないか
186デフォルトの名無しさん:2007/10/27(土) 03:17:30
そもそもさ、条件式の定数を右に書くか左に書くか、必ずどっちかに統一しろって言ってる人達は何なの?
繰り返し文は、かならずfor文で書くべきで、whileとかdo-whileを使うなとか言うのか?
(俺は繰り返し文は全部forで書くがな)
分岐は必ずifで行うべきで、switchは使うなとか言うのか?
(俺はswtich文嫌いだがな)
gotoだって、使うなといわれてはいるけど、例外処理に使うのならなんら問題ない。

どうして、場合場合によって使い分けようとしないの?
187デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 03:25:32
>>185
全ての関数の仕様が頭に入ってる人なんて居ない。
他人の使っている関数の仕様まで全部事細かに覚えてる人なんて居ない。
比べる定数は決まっているが、それはあくまで仕様上での話。
今、バグを防ぎたいと考えているのだから、全てのプログラマが仕様を完全に網羅しているとは
考えるべきではない。そういう甘い考えがバグを生む。

それから、プログラマの集中力の問題もある。
先に書いたものの方が、高い集中力を持って読んでもらえる可能性が高い。
だから、条件式の条件は成るべく先に持っていったほうが良いだろう。
長い長い関数呼び出し部を読み終わったころには、集中力がなくなっているかもしれないから。
189デフォルトの名無しさん:2007/10/27(土) 03:27:31
>>144
おまえ自身が
> 本質的な部分だけ抜粋してるのだが
と言っているんだよな。

本来のコードだと
for (int i = 0; i < 3; i++) {
}
の中で重要な処理をしているかもしれない。
144は本質じゃないと切り捨てたかもしれないけど、その判断が間違っている可能性は高いわけだ。
だから、何をしようとしたコードなのか分からないと、冗長かどうかの判断は出来ないといっているのだが。
ここまで丁寧に説明してあげれば、144も自分のおろかさを理解してくれるかな?
190デフォルトの名無しさん:2007/10/27(土) 03:28:23
>>187
そう書くのが一番良いんだけど、書かない奴も居るだろ。
191デフォルトの名無しさん:2007/10/27(土) 03:32:51
とは言ったものの、わざわざ
int ret = strcmp(str1, str2);
if(ret == 0){}
なんて書く奴がどれだけ居るのか気になるが。
192デフォルトの名無しさん:2007/10/27(土) 03:35:07
>>191
その程度なら、
if (!strcmp(str1, str2)) {}
と書くのが一番分かりやすいから。
193デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 03:42:30
>>178
NULLとの比較は読み飛ばしにくくなるかもしれんが
hoge_arg8を読み飛ばす可能性はかなり大きくなるだろ?

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

それなら、エラー処理系であろうifの条件よりも
hoge_arg8が見えやすいほうが良くないか?
195デフォルトの名無しさん:2007/10/27(土) 03:43:07
あとさ、定数左禁止派はさ、do-whileはどうなのよ。あれは良いのか?
あっちのが色物に思えるが。
196デフォルトの名無しさん:2007/10/27(土) 03:43:16
つか、無闇矢鱈と左に定数を置きたがる奴は、出してくる例題を間違えとる

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

if (NULL == pointer) {}
この場合は、定数が左にあることの意味は無い
しいて言うならば、コードを何れだけ見づらくできるか位の意味はあるかもしれない
(我々は、NULLがポインタなのかを知りたいのではなく、ポインタがNULLであるのかを知りたいのだから)
197デフォルトの名無しさん:2007/10/27(土) 03:50:28
>>193
そもそもstrcmpって定数が右を想定した作りだと思う

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

どっちが大きい時ifの中に入るかすぐわかるか?
198デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 03:50:53
>>194
hoge_arg8は見えにくくなるが、引数が途中で切れている場合、プログラマは気づく。
だって構文的に変なところで切れているからね。
だけど、==NULLがあるかないかまでは想像が及ばないかもしれない。

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

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL)
は、エディタ上では同じに見えるからな。
実は後者だったのに、早とちりして、前者だと思い込んでしまうかもしれない。
200デフォルトの名無しさん:2007/10/27(土) 03:51:32
ケースバイケースなのはわかったから
どこまでが左でどこからが右なんだ
201デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 03:53:55
>>199
てゆうか、折り返しもできずに、右端がスクロールしないと見えないような腐ったエディタは使うなよ。。。
203デフォルトの名無しさん:2007/10/27(土) 03:54:12
>>196
だけど、NULLと比べてポインタがどうなのか? という考え方をすれば、NULLが先に来る。
逆に、ポインタと比べてNULLがどうなのか? とは言わない。
ポインタが先に来るときは、ポインタがNULLであるか? と言う。
つまり、どっちでもいいということだ。
204デフォルトの名無しさん:2007/10/27(土) 03:55:19
>>200
ケースバイケースで、比較の主体が左にきたり右にきたりするソースが、一番見難い(醜い)です。
205デフォルトの名無しさん:2007/10/27(土) 03:57:02
>>198

>>193のどこにも

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

なんて書いてないだろ。本当に離散数学の基礎からやり直せ。
何を述べていて、何を述べていないのかの判断ぐらいつくようにしろよ。
じゃないと議論も糞も無い。
206デフォルトの名無しさん:2007/10/27(土) 03:57:10
>>199
ああ、確かに
つまりあなたは「{」の前に改行すべきではない、と俺に言わせ
別の論争を勃発させたいのだなw
207デフォルトの名無しさん:2007/10/27(土) 04:00:11
>>201
C langage FAQ なんてみんな一通り目を通してるんだよ。
一々貼り付けんでも良い。
今時定数を左に持ってくる人達は、>>201のような理由で左に持ってきているわけではない。
左に書いたほうが目立って言いと考えたから、左に持ってきているだけ。
それ以上でもそれ以下でも無い。目立つか目立たないか、ただそれだけ。

>>202
visual studio の初期状態ではそうですよ。
208デフォルトの名無しさん:2007/10/27(土) 04:02:06
>>204
ケースバイケースで、繰り返し文がforになったりwhileになったりdo-whileになったら
読めない人ですか?
ケースバイケースで、分岐がifになったりswitchになったりすると、読めない人ですか?
209デフォルトの名無しさん:2007/10/27(土) 04:04:08
>>206
改行しなくても一緒だよ。
・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) ){

・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL){
は、エディタ上では同じに見えるからな。
俺も通常は改行させないな。
210デフォルトの名無しさん:2007/10/27(土) 04:04:58
おまえら一晩中こんなくだらない論議してたのか?
夜はちゃんと寝なさい。
211デフォルトの名無しさん:2007/10/27(土) 04:06:48
だいたいさ、定数なんて右でも左でもどっちでも良いだろ。
それより、do-whileの方が気持ち悪くないか?
いやマジで。
do{
}while(exp); ← このセミコロンとか。
これは良くて、定数左は駄目とか言ってるやつって、どういう思考なのかわからん。
212デフォルトの名無しさん:2007/10/27(土) 04:09:18
>>209
「,」で終わってたらその後に続くのはいやでも解るでしょ
端を見ようとしないのはそいつの責任だよ
213デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 04:16:58
>>205
だんだん苦しくなってきたね。論理が破綻してきたよ、キミ。今夜が山だ。

>後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
>こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
>考える人も多いだろう。
215デフォルトの名無しさん:2007/10/27(土) 04:17:24
俺がなぜ定数が右にしているか考えてみた
a=1;は「aに1を入れる」と読むなら
if(a==1)は「aに1が入っているなら」と読むからであって
=と==を混同させたいんだよ
そもそも混同させたくて同じ記号を使ってるんじゃないかと思えてくるほどだよ
216デフォルトの名無しさん:2007/10/27(土) 04:17:37
>>212
続いていても、==NULLがあるかないかは、スクロールしてみるまで判らない。
引数がそれほど重要でない場合なら、スクロールを惜しむかもしれない。
実際、もうへとへとの状態でプログラムを読んでる場合だってあるわけで。
他人の責任だから関係ない、とは言っても、プロジェクトが停滞すると、
結局自分も巻き込まれるわけで。誰の責任かは正直どうでも良い。
217デフォルトの名無しさん:2007/10/27(土) 04:19:59
>>205
おいおいw

それじゃあ、>>193が全くの主観で何の根拠も無いって事を白状しているだけじゃないかw
で、より良い例として挙げられているコードでは、定数が右側に来ているのは、軽くスルーですか?
FAQを根拠に!strcmp()を否定するなら、よりよい書き方についてもFAQを根拠にしたほうがいいんじゃないかね?
218デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 04:21:09
NULLとかなら見りゃわかるからいいけど
変数っぽい面して実はconstでしたみたいなのが右や左にいるとうざいから
ある程度統一するのはいいんじゃないの?
220デフォルトの名無しさん:2007/10/27(土) 04:21:41
>>216
だから、単体テストをすればちゃんとエラーは検出できますよ。
テストをやらないって企業文化なら、仕方ないかもしれませんが。
221デフォルトの名無しさん:2007/10/27(土) 04:21:52
あした早起きして遠足だってのに・・・

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

定数が左にあって、唯一読みやすいのは、変数が一定の値の範囲内にある事を知りたい場合のみだろ
それ以外で、定数が左にあっても、読みにくいことはあれ、読みやすく感じることは有り得ない(そのコードを書いた奴だけは、読みやすいのかも知れないが)
223デフォルトの名無しさん:2007/10/27(土) 04:26:28
>>208
例えば、10回処理を繰り返す部分で、
for (i = 0; i < 10; i++) {}

i = 0;
while (i < 10) {
i++;
}
の両方が適当に使われたとしたら、読む人は苦労するだろうな。
forとwhileの使い分けにどんな意味が隠されているのか悩むだろうか。
224デフォルトの名無しさん:2007/10/27(土) 04:26:29
==の話ばかりするからダメなんだ
一時的に条件式を無効にしたくなったらどうする?
誰だってif(0&&condition)って書くよな?
定数0を左に書いた方がいいことは分かり切っている
225デフォルトの名無しさん:2007/10/27(土) 04:27:25
>>217
>>193 の 後半は余談だよ。
if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね、てこと。
それならまだ定数左派の方が信用できるよねって。
ロジカルに何か述べているわけではなくて、単に人格批判です。

だけど、if (!strcmp(str1, str2)) {} なんてコードをシレっと書いちゃうやつの言うことなんて、
信用できないよね。読みやすいコードを書くためのスタートラインにも立ってない。
226デフォルトの名無しさん:2007/10/27(土) 04:28:03
>>218
もうヤケクソ?

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

そりゃ確かに、「〜の方がいい」 とは書いてないけど。
「いいとは書いてない、マシと書いた」ってアンタ、小学生の喧嘩レベルやんw
眠いの?
227デフォルトの名無しさん:2007/10/27(土) 04:28:33
>>224
書かないよ。
228デフォルトの名無しさん:2007/10/27(土) 04:29:43
>>220
何いってんの?
だったら初めからコーディングなんて拘らなきゃいいだろ。
どうせ単体テストするので、好きにやればいいじゃないという話になる。
229デフォルトの名無しさん:2007/10/27(土) 04:29:50
つーかさ
もうif(0 == a || a == 0)でよくね?
右にも左にも定数が来てて完璧だろう
230デフォルトの名無しさん:2007/10/27(土) 04:31:12
>>225
> if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね
根拠は?

単に俺が気に食わないだけ、なんて言わないよねw
もしかして、==とか<とか>=なんかが書いてないと、条件文が理解できない人ですか?
231デフォルトの名無しさん:2007/10/27(土) 04:31:43
>>224
//if (condition)
if(0)
232デフォルトの名無しさん:2007/10/27(土) 04:32:32
>>216
引数よりも==NULLの方が重要ならifの中に
関数呼び出しを丸ごと入れたりなんてしないでしょ

人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
そんな人のケアをする自信なんて、俺にはないな
233デフォルトの名無しさん:2007/10/27(土) 04:32:51
>>222
ポインタが有効か無効かを知りたい、と考えることも出来るし、
逆に、有効なポインタなのか、無効なポインタなのか、と考える人も居るかもしれない。
どっちで考えてもいいし、何の問題も無い。
234デフォルトの名無しさん:2007/10/27(土) 04:33:34
>>228
単に、「プロジェクトが停滞する」に対する反証をしただけですよ。
こんなことも読み取れないなら、ひとまず睡眠を取って、頭をクリアさせたらどうですか?

え、クリアさせても今と変わらない?
それは、もう、どうしようもないかな。
235デフォルトの名無しさん:2007/10/27(土) 04:35:06
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆          ___________
      ∧_∧ | |         /          / おらっ!出てこい
     (   )| |_____    ∧_∧   <  Cマガジン ●田
     「 ⌒ ̄ |   |    ||   (´Д` )    \ おまいのせいで、こんだけ・・・
     |   /  ̄   |    |/    「    \      ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
236デフォルトの名無しさん:2007/10/27(土) 04:36:29
こんな醜い争いが二度と起こらないように
C++0xでは定数をLvalueにしてもらうしかないな
237デフォルトの名無しさん:2007/10/27(土) 04:36:45
>>233
無効なポインタがどれかを調べたいなら、
if (NULL == xxx)って書いたほうが分かりやすいかもね。
238デフォルトの名無しさん:2007/10/27(土) 04:37:29
>>223
後者のケースだと、for文を使うべきだよ。
whileを使う時は主にカウンタ変数がいらない時だな。
forとwhileを使い分ける人が居るように、
定数を右に書いたり左に書いたりする人が居ても良いだろ。
そして、定数が左だからってそんなに怒るほどのものでもない。
239デフォルトの名無しさん:2007/10/27(土) 04:40:31
電車の座席に座るヤツが居るように
電車の床に座ってもいいだろ!
公園のベンチに座るヤツが居るように
コンビニの駐車場に座り込んでもいいだろ!
そんなに怒るほどのものでもない。
240デフォルトの名無しさん:2007/10/27(土) 04:43:02
>>226
眠いのはお前だろ。眠くてしょうがないお前が勝手に勘違いしただけだろ。
「AよりBの方がまだマシ」という言い方をした場合、
「Bが良い」と主張しているということには決してならないよ。

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

要はお前が勝手に勘違いしてるんだよ。
お前みたいなおっちょこちょいが居るから、文句言われようとも、
わざわざ定数を左に書かざるを得なくなる。その辺わかれ。
241デフォルトの名無しさん:2007/10/27(土) 04:43:16
もう「比較演算子の左オペランドに定数を置く奴は死ね」スレでも立ててそっちでやってくれんかね
242デフォルトの名無しさん:2007/10/27(土) 04:46:20
>>240
おまえ、実は>>80だろ?
もう、定数を左に置いても苛めないからさ、どこの会社かだけは教えてくれ。
お前を真人間に教育するよりも、関係を持たないようにする方が、遥かに安上がりだわ。
243デフォルトの名無しさん:2007/10/27(土) 04:46:23
寿司食いたいフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
244デフォルトの名無しさん:2007/10/27(土) 04:48:19
if (0 == a)
  ↑  ↑
  糞  尿
245デフォルトの名無しさん:2007/10/27(土) 04:49:43
俺なら尿を選ぶ。糞はちょっとな・・・
246デフォルトの名無しさん:2007/10/27(土) 04:52:19
>>230
230は単に釣りだと信じたいのだが・・・。
strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、
正真正銘、整数としての戻り値を返す。
だから整数と比較するべき。
意味上も型上も正真正銘整数なものを、
ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。

逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。
Cの禁じ手全部 OK じゃね?
定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。
247デフォルトの名無しさん:2007/10/27(土) 04:58:36
やばい、真性のキ印だったのか。

>>246
そもそも、Cにはboolなんて型は存在しないぞ。
ifとかの条件式は、単に0か非0かを見ているだけ。
248デフォルトの名無しさん:2007/10/27(土) 05:01:44
>if (!strcmp(・・・)) と書くのが一番わかりやすい
てのは、いくら何でも間違いだろ。
勢いで書き込んだ後、おっといけね、strcmp だった〜orz ってとこだろね。
249デフォルトの名無しさん:2007/10/27(土) 05:02:52
>>232
>引数よりも==NULLの方が重要ならifの中に
>関数呼び出しを丸ごと入れたりなんてしないでしょ
そうとは限らんよ。関数として見れば、関数が大事だし、
if文として見れば、条件が大事だ。

>人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
>そんな人のケアをする自信なんて、俺にはないな
改修するならしっかり読むが、さらっと目を通すだけという場合も有るだろ。
おっちょこちょいなやつは何処にでも居るもので、そういう奴が変な勘違いを起して、
面倒を起したら困る。
実際、このスレにも自分の反論しようとしている相手の文章すら、
まともに読まない奴が居るわけで。
んで、自分のミスなのに、「お前の書き方が悪い」と開き直る。
だから、自分から相手が読みミスらないような書き方をする必要が出てくる。
結局こっちにも火の粉は飛んでくるからね。
250デフォルトの名無しさん:2007/10/27(土) 05:05:45
最高にド低脳な発言してください in ム版(XVII)
http://pc11.2ch.net/test/read.cgi/tech/1179424842/

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

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

↑最高にド低脳な発言!
251デフォルトの名無しさん:2007/10/27(土) 05:09:05
>>250
ワロタ

自分で「ド低脳」って認めてどうするw
252デフォルトの名無しさん:2007/10/27(土) 05:09:26
>>234
だから好きにやれば良いじゃん。

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

あなたにウマいコードは必要ないじゃない。
253デフォルトの名無しさん:2007/10/27(土) 05:10:09
オチがついたところで、また明日。おやすみなさい。
254デフォルトの名無しさん:2007/10/27(土) 05:11:08
>>239 は コンパイルエラー
255デフォルトの名無しさん:2007/10/27(土) 05:13:27
>>242
違う。
この議論は前スレから永遠と続いている。
というか、このスレは今現在俺だけで持ってるようなものなんだけど、
前スレからの流れを見てもらえれば、俺が>>80でないことは分かる。
物事への認識のレベルが違いすぎるからすぐ判るはず。
256デフォルトの名無しさん:2007/10/27(土) 05:18:14
>>247
boolが無いから整数で代用しているんだろ。
>>247の2行目に、
>boolを整数で代用している
という文がちゃんと入ってるだろ。
単に整数値といっても、C言語の場合は、意味の上では、整数だったりboolだったりするから、
その辺は使い分けるべきだろ。
その程度の意識も無いのに、ウマいもヘタも無いね。
そういうやつは定数が左にきたぐらいでグダグダいう立場に無い。
糞食いながら、「しょんべんマズー」と言ってるようなものだ。
257デフォルトの名無しさん:2007/10/27(土) 05:27:13
つーかもう今日は寝る。
返事はまた明日気が向いた時に返すかも。

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

>>250>>125 をド低脳スレに貼ったらしいが、この始末どうつけるつもりなんだろうな。
他の右派(というか、単なるアンチ俺、もとい、暇つぶしの友)が可愛そうだ。
258デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 07:33:42
260デフォルトの名無しさん:2007/10/27(土) 07:38:41
腹減った
261デフォルトの名無しさん:2007/10/27(土) 07:43:11
>>257
>暇つぶしの友
他所でやれ脳足りん。
262デフォルトの名無しさん:2007/10/27(土) 07:49:35
if (!strcmp(str1, str2)) {} は綺麗

*dst++ = *src++ と勝るとも劣らないくらい綺麗
263デフォルトの名無しさん:2007/10/27(土) 07:50:41
while(*dst++ = *src++);
264デフォルトの名無しさん:2007/10/27(土) 08:24:17
英語ができると、if (!strcmp を、if not string compare と読んでしまうので
等値性をテストしているとは認識しにくいな。

!をnotと読まない人は気にならないんだろうけど。
265デフォルトの名無しさん:2007/10/27(土) 08:55:17
if (!strcmp(str1, str2)) {} の何がいけないのか分からない
266デフォルトの名無しさん:2007/10/27(土) 08:56:01
if(str1 == str2) {}
だろ上官
267デフォルトの名無しさん:2007/10/27(土) 08:59:28
>>266
その発想は無かった
268デフォルトの名無しさん:2007/10/27(土) 09:06:07
・・・なんでこんなことを議論しているのかがよく判らない。
269デフォルトの名無しさん:2007/10/27(土) 09:14:44
おまいらおはよう。未だに左定数の話をしていて正直がっかりだ。

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

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

>>189
> の中で重要な処理をしているかもしれない。
それだったら「本質の抜粋」にならないでしょーが。
for文の中は、変数名と定数値以外、「そのまんま」だ。
違う点は、オリジナルはC++じゃなくてJavaなこと、関数(メソッド)のシグネチャ、
書いた処理の前にもコードがあること、最後のif文のブロックの中身。
270デフォルトの名無しさん:2007/10/27(土) 09:39:00
>>269
補足しておくと、ここで言ってる「本質」とは、
「b-N<a≦b (a, b, Nは整数) を判定する、ただそれだけのために、大小比較じゃなくてループを使ってる」
ってことだと書けば理解してもらえるか?>>189
271デフォルトの名無しさん:2007/10/27(土) 09:58:28
ぱっと見て「ヘタだなぁ」と思うスレ
272デフォルトの名無しさん:2007/10/27(土) 10:06:30
くだらねー議論してんなぁ。
定数を左に置くか否かなんてとっくの昔に結論でてるだろうが。

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

コンパイラが警告出さない時の数十年前に編み出された小手先を
未だに神の一手が如く崇拝してんじゃねぇよ、ボケ。
これを知ってる俺って技術力たけぇなんて思ってたかもしれんが、
ド低脳の証明だ。玉石混交の石のほうだ、カス。
273デフォルトの名無しさん:2007/10/27(土) 10:14:14
おまえら、何度も同じことをくりかえすならfor文の中にでも入れとけよ
274デフォルトの名無しさん:2007/10/27(土) 10:18:04
>271
禿同
275デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 10:21:53
>275
if文の中身間違えてない?
277デフォルトの名無しさん:2007/10/27(土) 10:30:11
>>269
あまりにもスレタイトルに沿ったコードだったからレスつけるまでもないと思った。
278デフォルトの名無しさん:2007/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
279276:2007/10/27(土) 10:55:07
間違った;ごめん
280デフォルトの名無しさん:2007/10/27(土) 11:02:33
>>278
cl は /W4 で使うもんだ。
gcc は最低でも -Wall で使うもんだ。
281デフォルトの名無しさん:2007/10/27(土) 11:11:33
おれ定数左派だけど定数を左におく場合の欠点って何?
可読性落ちる?
でも落ちるか?
慣れてないとえっ?って思うかもしれないけど別にそれぐらい大丈夫でしょ。
javaでも
"hoge".equal(var);
ってイディオムあるぐらいだし。

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

もちろん定数右でもコンパイラの警告で見つかってるかもしれないけど
定数左にして損はなしと思うから昔から今までずっとそのスタイル。
282デフォルトの名無しさん:2007/10/27(土) 11:16:37 BE:789120656-2BP(125)
ソースファイル内でそのスタイルで統一されてるなら、別に定数が右だろうが
左だろうが、個人の好みだからいいと思うけどなあ。

会社とかで、規約がちゃんとある場合は別で。
283デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 11:25:11 BE:1473024487-2BP(125)
gccも-Wallつけないと警告でないね。
まあ、普通は付けてると思うけど。
285デフォルトの名無しさん:2007/10/27(土) 11:37:51
>>282
スタイルには単に好みの問題と、実際にメリットのあるものとがある。
前者は ifの条件式の後に中カッコつけるか、改行してからつけるか、など。
後者はif のあとには必ず中カッコをつける、など。
定数左は後者だと思う。(可読性に問題はないと思うので)
286デフォルトの名無しさん:2007/10/27(土) 11:52:10
>>282
「統一されてればいい」ってことなら、あえて少数派のスタイルを選ぶことはないんじゃないの? >>72

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

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

ソースコードの理解しやすさ(可読性?)も考えると、トレードオフで
どちらを選ぶかは個人の趣味レベルになるのかなあと。
上で議論されてるように、コンパイラとかで容易にチェックできるわけだし。
288デフォルトの名無しさん:2007/10/27(土) 12:12:39
コーディングスタイルに拘りすぎる奴はヘタクソ
コーディングスタイル論争に突入する奴はさらにヘタクソ
289デフォルトの名無しさん:2007/10/27(土) 12:15:18 BE:1262592386-2BP(125)
>>286
少数派ではあるけれども、>>285の言うようにチェッカとかを使わなくても
ミスに気づくことができるという利点があるので選ぶんだろうね。

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



漏れが見たオープンソースなソフトウェアのソースは定数が右にあった。
もし、定数が左にあることにもっと優位な点があるなら、とっくに
ほとんどのソースが定数左になってると思うんだけど、いかがだろう。
290デフォルトの名無しさん:2007/10/27(土) 12:49:32
とヘタクソ厨がもうしております
291デフォルトの名無しさん:2007/10/27(土) 12:57:03
>>281
主語と目的語の区別がつかないアホには
自然言語からやり直せといいたい。
292デフォルトの名無しさん:2007/10/27(土) 13:05:06
読む分にはどっちでもいい。何の違いもない。
書くときはsubject == compareの方が流れ的に書きやすい。
293デフォルトの名無しさん:2007/10/27(土) 13:50:50
288の書いたコードは汚そうだな。
294デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 14:31:10
if(*dst++ = *src++){
hogehoge
}

みたいなとき警告でないようにしたいのですが
296デフォルトの名無しさん:2007/10/27(土) 14:33:15
if((*dst++ = *src++) != 0){
297デフォルトの名無しさん:2007/10/27(土) 15:11:01
もうね、コーディングスタイルスレでも立ててそこでやれと
298デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/10/27(土) 15:41:35
わかったから月曜になったらちゃんとハロワ池よ
300デフォルトの名無しさん:2007/10/27(土) 15:54:07
;`;:゙;`(;゚;ж;゚; )ブフォッ!
301デフォルトの名無しさん:2007/10/27(土) 16:04:59
strcmpでの定数の右左に関して言えば、圧倒的に右だろう。
if (strcmp(str1, str2) < 0)

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

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

そのつどリファレンスを引いたりしたくないし、
機械的に右へ書いてしまう習慣は役に立つ。
302デフォルトの名無しさん:2007/10/27(土) 16:05:07
できる奴ほどスタイルにこだわる
303デフォルトの名無しさん:2007/10/27(土) 16:14:56
大きいほうを右に配置したいし、常にそうするから、
結果的に不等号の「>」は不要だと思うんだよなぁ。

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

チラシの裏にでも書いておけって? すまんね。
304デフォルトの名無しさん:2007/10/27(土) 16:31:17
だれか、288を日本語に翻訳してくれ。

で、実際のところ、定数は左に置けとか頑張ってるのって、一人だけだろ?
305デフォルトの名無しさん:2007/10/27(土) 17:26:57
>>301
それは「定数を左辺に」と主張している派の本質と話題をそらせて釣りだと思うけど
306デフォルトの名無しさん:2007/10/27(土) 17:28:27
ぱっと見て「バカだなぁ」と思うコード
307デフォルトの名無しさん:2007/10/27(土) 18:09:07
スレスピードがきもいよお前ら
308デフォルトの名無しさん:2007/10/27(土) 18:14:17
いまム板で一番勢いがあるスレだぜここは
309デフォルトの名無しさん:2007/10/27(土) 18:15:40
昨夜から今朝にかけての速度はもう、ある種の祭りだった。
310デフォルトの名無しさん:2007/10/27(土) 18:24:05
お前ら・・・まだ祭るつもりか・・・?






(・∀・)イイヨイイヨ-
311デフォルトの名無しさん:2007/10/27(土) 18:28:43
キティガイが一人でも出てくると、スレのスピードが上がるからな。
312デフォルトの名無しさん:2007/10/27(土) 18:31:34
今、顔真っ赤にして力説してるのは、前スレで「if (a >= 0)はその語順じゃ読めない」と
恥をさらした奴に違いない。
313デフォルトの名無しさん:2007/10/27(土) 18:36:00
>>312 もういいw もうゆるしてやれww
314デフォルトの名無しさん:2007/10/27(土) 18:52:52
break;
315デフォルトの名無しさん:2007/10/27(土) 18:54:59
goto 80;
316デフォルトの名無しさん:2007/10/27(土) 19:06:44
>>315 おいっw
317デフォルトの名無しさん:2007/10/27(土) 19:08:09
>>80
ええ? そのバグを防ぐ方法を知らないの?
こういう話のときには必ずでるのに。。。
基礎の基礎だよ。
318デフォルトの名無しさん:2007/10/27(土) 19:08:23
このスレは無限ループに入りました。
319デフォルトの名無しさん:2007/10/27(土) 19:12:48
>>80
そんなもんコードチェッカーにかければすぐ見つかるだろ。
まさかコードチェッカー使ってないのか?
320デフォルトの名無しさん:2007/10/27(土) 19:34:08
iPod touch買ったよ
321デフォルトの名無しさん:2007/10/27(土) 19:34:57
誤爆
322デフォルトの名無しさん:2007/10/27(土) 19:56:44
>>320
さわらせてくれよ
323デフォルトの名無しさん:2007/10/27(土) 20:04:59
初音ミクを Amazon で注文した
早く来ないかな wktk wktk
324デフォルトの名無しさん:2007/10/27(土) 20:26:22
定数を右辺に書いていてうっかり「=」で比較してしまうバグよりも
それ以外の原因で起こるバグの方が100000000倍くらい多いと思う
325デフォルトの名無しさん:2007/10/27(土) 20:48:57
発生頻度はそうだろうけどさ
仮にコンパイラのwarningすり抜けた場合、==と=の間違い見つけるの結構きついよ
同様に!=と=!の間違いも見つけるのもきつい
実際はまった経験があると見方が変わると思う
326デフォルトの名無しさん:2007/10/27(土) 20:50:30
そこでconcept checkingですよ
327デフォルトの名無しさん:2007/10/27(土) 21:03:42
>>325
ホワイトボックステストやれ
328デフォルトの名無しさん:2007/10/27(土) 22:37:35
80の人気にshift
329デフォルトの名無しさん:2007/10/27(土) 22:39:18
うちの女社員がこんなコード書いて遊んでるだけどどうしたらいいの?
if/*     ∧∧       */
/*〜*/(*b == '-')/*<ニャー  */
/*    >>  >>       */
/*=====================*/
330デフォルトの名無しさん:2007/10/27(土) 22:46:26
>>329
コードレビューで、「このコメントは何ですか?」って真面目に質問する
331デフォルトの名無しさん:2007/10/27(土) 22:53:20
>80も>80を徹底的に叩いてる奴も、どうでも良い事までルールで縛って
生産性落とす奴等と同列に見えるのは気のせいかな。

こーいう奴等が権力握ると、ifと括弧の間に空白を入れろとかいう
どーでも良いルールを作るのだろうな。
332デフォルトの名無しさん:2007/10/27(土) 22:56:03
>>331
ということにしたいのですね。

>>315
このスレ的にはgotoは禁止ですw
333デフォルトの名無しさん:2007/10/27(土) 22:58:33
>>331
その程度の事ならコード整形ツールを使いましょう
334デフォルトの名無しさん:2007/10/27(土) 23:03:00
>>329
下手に見えるコードではないな

問題は人間性なのでなるべく遠ざけましょう
権限があるのなら閑職を与えてそっとしておきましょう
335デフォルトの名無しさん:2007/10/27(土) 23:03:42
>>329
そういう遊びは大事だと思う。
ちゃんと仕事してんならそれくらいは大目に見てやれ。
336デフォルトの名無しさん:2007/10/27(土) 23:03:55
>>331
どこにスペースを入れるかは、コーディングルールに入れるよ。
入れないと、if(a==0){}とか書く奴いるし。
337デフォルトの名無しさん:2007/10/27(土) 23:06:26
コーディングスタイルにこだわりがない奴ってなんなの?
338デフォルトの名無しさん:2007/10/27(土) 23:10:00
人のソースはおろか、自分のソースすら読むことが無い奴らなんでしょ。
339デフォルトの名無しさん:2007/10/27(土) 23:10:38
「なに、このコーディングルール。ストレス溜りまくりだわ」とかボヤキながらコーディングしてるとしたら、
それを守らないときに、お前のコードを読む、数倍の人間がストレスが溜まるのだ。
340デフォルトの名無しさん:2007/10/27(土) 23:14:03
コスト感覚に優れた奴だと思う
341デフォルトの名無しさん:2007/10/27(土) 23:17:34
そう思った時期が漏れにもあったが
数多く他人のソース読んでるうちに
そういうことはいちいち気にならなくなる

君は経験が足りないようだね

342デフォルトの名無しさん:2007/10/27(土) 23:19:52
>Any professional programmer can easily read and write code
>that is formatted a little differently than they're used to.
343デフォルトの名無しさん:2007/10/28(日) 00:23:22
>>329
ニャー を ワン に書き換えてやれ
344デフォルトの名無しさん:2007/10/28(日) 00:29:12
書き換えるなら ヌルポ しかない
345デフォルトの名無しさん:2007/10/28(日) 00:48:24
>>342
プロフェッショナルプログラマーならそうかも知れんが、それを底辺コーダーに要求しちゃだめだろw
346デフォルトの名無しさん:2007/10/28(日) 00:55:26
だけど、プロフェッショナルなほどコーディングスタイルに拘ると断言しちゃってるやつが居るよ。
347デフォルトの名無しさん:2007/10/28(日) 00:57:19
自称プロフェッショナルだから
348デフォルトの名無しさん:2007/10/28(日) 00:59:59
定数の位置を意識するより、
正しい条件式を書けるように意識したがいいよ
349デフォルトの名無しさん:2007/10/28(日) 01:05:11
てかさ、もう分かっただろ。

コーディングスタイルに拘ってる、とか偉そうに言ってるが、
if( !strcmp(str1, str2) ){} とかシレっと書いちゃったりするのが現実なんだよ。
結局、コーディングスタイルってのはある種のエゴみたいなものだからな。
逆に、コーディングスタイルには拘らないよ、といってる奴は、
つまりこれは、私はあなたにとことん合わせます、といってるわけで、
実際には、こういう協調性のあるやつの方が良いコードを書く。
要はこのスレにたむろしている連中なんてのは、単なるオナニストであって、
プロフェッショナルとは程遠いところに居るって事だよ。
真のプロなら、「どんなコードでも書きます!!」と言うはずさ。

それからもう一つ分かったことは、
このスレは俺が居ないと進まないって事だ。
350デフォルトの名無しさん:2007/10/28(日) 01:07:55
プロフェッショナルなら if( !strcmp(str1, str2) ){} ごときにそこまで粘着しない
351デフォルトの名無しさん:2007/10/28(日) 01:09:30
プロフェッショナルなやつは、どんなコードでも読めるから
if (!strcmp(str1, str2)) {} ぐらいなんでもないだろう。
だけど、コーディングスタイルに拘ります!!とか言ってるやつが、
if (!strcmp(str1, str2)) {} なんて書いてたら、そりゃ滑稽だろう。
「拘ってそれですか?」と言いたくなる。
352デフォルトの名無しさん:2007/10/28(日) 01:10:26
> それからもう一つ分かったことは、
> このスレは俺が居ないと進まないって事だ。

これは恥ずかしい。
また昨日みたいな祭りを繰り返すつもりか?
353デフォルトの名無しさん:2007/10/28(日) 01:14:34
if (!strcmp(str1, str2)) {} に粘着しているわけではなくて、
自分はこんなコード書いといて、他人のコードにつべこべ難癖つけてる姿を滑稽に思い、
そこに粘着しているんだよなー。
「おれウンコ大好きです」と言いながらウンコだべてるなら、ご自由にと思うし、
「たまには尿もいいよね」と言いながら尿を飲んでるなら、まぁ仕方ない。
だけど、「尿のんでるやつプギャー」とバカにしながら自分はウンコ食ってるなら、
もう笑うしかないじゃない。
354デフォルトの名無しさん:2007/10/28(日) 01:19:21
if(strcmp(s,s2) == 0){}
よりも
if(!strcmp(s,s2)){}
の方が読みやすいと思うけど、結局どっちでもいい
355デフォルトの名無しさん:2007/10/28(日) 01:19:58
>>352
事実だろ。
お前らみたいな自分勝手で我侭で、我が強く、多感で、
自分の価値観を犯されることを心底嫌う奴らをおちょくると、
すぐ発狂するから面白い。

おれが「好きにすりゃ良いじゃん」って言ってるのに、
「いや、好きにするべきではない」とかわけ分からんこと返してくるし。
好きにすりゃ良いじゃんって言ってるんだから、好きにすりゃ良いのに。
356デフォルトの名無しさん:2007/10/28(日) 01:22:27
自分だけ気づいてないって滑稽だよね
357デフォルトの名無しさん:2007/10/28(日) 01:22:54
>>354
Cを投げ捨てればよい
358デフォルトの名無しさん:2007/10/28(日) 01:23:49
このスレのやつらは
所詮 >>354 の レベルだってことだよ。
359デフォルトの名無しさん:2007/10/28(日) 01:30:12
>>355
だから、お前は好きなようにコーディングしていいよ。
ただ、お前のスタイルが一番優れていると、回りに宣伝するのだけはやめてくれ。
360デフォルトの名無しさん:2007/10/28(日) 01:32:33
尿と糞に例えているけど、実際のところはミネラルウォーターと下水くらいの違いがあるだろ。
361デフォルトの名無しさん:2007/10/28(日) 01:40:16
つーかFAQになっていることに対していまさらウダウダ言うな
http://www.kouno.jp/home/c_faq/c17.html
362デフォルトの名無しさん:2007/10/28(日) 02:18:55
if (!strcmp(str1, str2)) {}
別に読みづらくない
いつも、"!"を「0じゃない」って読んでるから
363デフォルトの名無しさん:2007/10/28(日) 02:19:06
ここはルールスレではない。
自分が「下手だ」と思うならどんどん貼って、議論したい奴が議論するスレだろ。
364デフォルトの名無しさん:2007/10/28(日) 02:19:37
おめーらはプロジェクトのコーディング規約にあわせてりゃ良いんだよ
こだわり見せるのは自分のオナニープログラムだけにしとけ
それなら誰も文句言わんから
365デフォルトの名無しさん:2007/10/28(日) 02:19:49
>>342
恣意的に引用するのは止めような。

C++ Coding Standards
Tried-and-true guidelines for C++ programmers
ttp://www.ddj.com/architect/184401863

>Don't sweat the small stuff. (Or: Know what not to standardize.)
>
>Don't enforce matters of personal taste. Don't enforce obsolete practices.
>
>Issues that are really just personal taste and don't affect correctness or readability don't belong in a coding standard.
>Any professional programmer can easily read and write code that is formatted a little differently than they're used to.
>
>Do use consistent formatting within each source file or even each project, because it's jarring to jump around among
>several styles in the same piece of code. But don't try to enforce consistent formatting across multiple projects or
>across a company.
366こだわるのはイクない派:2007/10/28(日) 02:22:11
なぁ、どこかに自分が何派だとか書いた方が良くないか?
どの立場で言ってるのか分からんレスが多すぎる。

#正直そんなレス書く奴はコードも…
367デフォルトの名無しさん:2007/10/28(日) 02:25:11
>>342>>365で大きく意味が変わってるようには見えない
>>342の引用で十分だと思う
368クレハ:2007/10/28(日) 02:25:33
そのくらい、書かれた内容から読み取れよw
369デフォルトの名無しさん:2007/10/28(日) 02:27:19
>>367
君には違って見えなくても、違った解釈したレスしてる奴いるじゃん
370デフォルトの名無しさん:2007/10/28(日) 02:30:01
規約/ルールの話はスレチガイだ派

PGにはプロフェッショナルもコーダーもない。PGはPGだ。
371デフォルトの名無しさん:2007/10/28(日) 02:30:13
なあ、自作自演がひどいと感じるのは俺だけか?
372るくは:2007/10/28(日) 02:31:36
そんなにむごいか?
自作自演しているのって、80くらいしかいなさそうだけど。
373デフォルトの名無しさん:2007/10/28(日) 02:32:08
>>341
お前の会社は、新人君を野放しにするのか?
374デフォルトの名無しさん:2007/10/28(日) 02:32:25
まあ、一番大事なのは

>Don't sweat the small stuff. (Or: Know what not to standardize.)

だね
375デフォルトの名無しさん:2007/10/28(日) 02:33:05
>>372
お前、前スレでif a <= 0が読めないとか言ってたやつだろ。
いい加減に粘着やめろよwww
376ヤマハ:2007/10/28(日) 02:36:37
>>375
定数右置きに文句を言っているなら>>80の仲間だろw
377デフォルトの名無しさん:2007/10/28(日) 02:37:03
コーディングルールって、チームで作業するときに使うものってわかってるんだろうか?
378デフォルトの名無しさん:2007/10/28(日) 02:38:43
スタイルなんてこだわらなくていいじゃんって奴、ひとりしかいない気がする。
379デフォルトの名無しさん:2007/10/28(日) 02:40:48
自分はこだわらない派だけど他に3〜4はいると思う
380デフォルトの名無しさん:2007/10/28(日) 02:41:57
>>379
チームでもこだわらないの?
381デフォルトの名無しさん:2007/10/28(日) 02:43:06
return "もうそろそろ終われ";
382デフォルトの名無しさん:2007/10/28(日) 02:44:06
こだわらないが従いはする
でも、従うことがあまりにもコスト高なら代案を提案してみたりはする
383デフォルトの名無しさん:2007/10/28(日) 02:44:33
で、ヘタなコードはどこにあるんだ。
if (条件) {
1000行くらいのコードA
3行くらいのコードX
500行くらいのコードB
} else {
1000行くらいのコードA(上のAと全く同一)
3行くらいのコードY
500行くらいのコードB(上のBと全く同一)
}
なんて素敵コードは見たことあるが。
384デフォルトの名無しさん:2007/10/28(日) 02:45:47
あー「こだわらない」の定義が違うことがわかった。
385デフォルトの名無しさん:2007/10/28(日) 02:48:35
>>378
一番素敵なのは、拘らないといいつつ、定数を左辺に置くことに拘りまくり
Cの文法が自分の趣味に合わないと言い続けてる人が居ることだけどね
386こだわるのはイクない派:2007/10/28(日) 02:50:30
>377
ルールでスタイルまでガチガチに縛るのはナンセンス。
比較式の書き方や空白の入れ方とか、そんなルールを決めても
デメリットの方が大きい。

一番怖いのはルールが細かすぎるあまり徹底し切れず、
最も重要なルールも守られない事。
ルールは必要最低限に留めて、その分徹底させた方がいい。
387デフォルトの名無しさん:2007/10/28(日) 02:50:42
プロならreadability、保守性に気を使う。
これに反論する奴はいないだろう。

気を使った結果、if (0 == a)と書けというコーディング規約を作るかもしれんが。
388デフォルトの名無しさん:2007/10/28(日) 02:51:42
>>386
慣れれば、そのスタイルで自然に記述できるようになるだろ?
389デフォルトの名無しさん:2007/10/28(日) 02:57:01
>>386
インデントをタブにするとか空白4文字にするとか、カッコをどこにおくかなんて、どうでもいいんだよ。
大抵の開発だとCVSなんかにチェックインするだろうから、チェックインの前にインデント変換ツールに通すだけだから。

スタイルが統一されているコードがチェックインされているなら、個人で開発中のコードはどんなに汚くても、周りの人には影響なし。
390プラハ:2007/10/28(日) 02:58:51
ところで、>>366はどこに行ったんだ?
提案だけしておいて逃げるとはなさけなや。
391デフォルトの名無しさん:2007/10/28(日) 02:59:36
初めからわかっていたことだが、つまりは、コーディングルールなんて、どうだって良いってことだ。
拘るのはオナニー野郎だけ。
392デフォルトの名無しさん:2007/10/28(日) 03:01:29
放置プレー
393デフォルトの名無しさん:2007/10/28(日) 03:03:08
boost無いとプログラミング出来ませんという奴
394こだわるのはイクない派:2007/10/28(日) 03:03:52
>388
if(定数==変数)とか強制されたい?

>389
なぜ漏れに反論するのか分からない。
同じ意見なのだが。

>390
名前見て下さい
395デフォルトの名無しさん:2007/10/28(日) 03:08:25
本当に、あんまり詰まらないことに拘るのは学生までにしておけよ。
396デフォルトの名無しさん:2007/10/28(日) 03:13:08
>>393
shared_ptrだけは許してください
397デフォルトの名無しさん:2007/10/28(日) 03:23:16
strcmp(str1, str2)は、
str1とstr2が等しければ0を返し
str1がstr2より大きければ正を返し
str1がstr2より小さければ負を返す

つまり、関数名通りに文字列を比較する関数と見た場合
比較した文字列が等しければ偽を返し、比較した文字列が等しくなければ真を返す関数である
故に、文字列が等しいことをテストしたければ、not演算子で真偽を逆転させるのが正しい比較となるが
それでは、おっちょこちょいが、文字列が等しくないことをテストするのだと勘違いする可能性があるため
#define StrEq(s1, s2) !strcmp(s1, s2)
とでも定義して、文字列が等しいことを調べているのだと主張する方がいいだろうと言うのがC FAQの趣旨だ

それを、
if (!strcmp(s1, s2)) {}
なんて事を書くのはおかしいと書くのがおかしいのでは無いのだろうか?
定数を左辺に置く以上に恥ずかしい発言だと思うのだが
398デフォルトの名無しさん:2007/10/28(日) 04:01:21
>>393
それはむしろまともだろう
399デフォルトの名無しさん:2007/10/28(日) 04:40:31
>>397
触っちゃダメ
400デフォルトの名無しさん:2007/10/28(日) 04:41:56
もっと大局を見ろ
strcmpなんてifで使うためにあるんじゃないんだよ
qsortの引数に渡すためにあるんだよ
401デフォルトの名無しさん:2007/10/28(日) 04:51:11
こういうの何て言ったっけ、自転車置き場議論?
402デフォルトの名無しさん:2007/10/28(日) 05:41:35
>>397
>つまり、関数名通りに文字列を比較する関数と見た場合
>比較した文字列が等しければ偽を返し、比較した文字列が等しくなければ真を返す関数である

なんで、わざわざそう「見る」必要があるんだ?

>strcmp(str1, str2)は、
>str1とstr2が等しければ0を返し
>str1がstr2より大きければ正を返し
>str1がstr2より小さければ負を返す

と自分でも書いている通り、strcmpは真偽ではなく、あくまで整数値を返すわけだが。
等しい時0になるってだけで、真偽は関係ない。
等しい時にたまたま0が返って、それがたまたま偽だってだけだ。
0歳かどうか調べるのに、わざわざ if( !age ){} なんて書く奴は居ない。
403デフォルトの名無しさん:2007/10/28(日) 05:51:33
str1 > str2かどうか調べる時は strcmp(str1, str2) > 0 と書き、
str1 < str2かどうか調べる時は strcmp(str1, str2) < 0 と書き、
str1 >= str2かどうか調べる時は strcmp(str1, str2) >= 0 と書き、
str1 <= str2かどうか調べる時は strcmp(str1, str2) <= 0 と書くのに、
等しいかどうか調べる時は、!strcmp(str1, str2) と書くのは不自然じゃないか?

また、if( !strcmp(str1, str2) ){} と書く奴は、等しくないかどうか調べる時には、
if( strcmp(str1, str2) ){} と書くのか?
404デフォルトの名無しさん:2007/10/28(日) 06:04:17
>>397 は本当にどういう思考なんだろう。
例えば、年齢をあらわす整数型の変数ageが有ったとする。
この場合、ageは年齢を表す、と考えるのが普通だろう。
それをどうしてわざわざ、
ageは0歳の時は偽を表して、0歳でないときは真を表します、
と考えなければならないのだろう。

if ( !age ){ /* 0歳のとき */ }
else if( age == 1 ){ /* 1歳のとき */ }
else if( age == 2 ){ /* 2歳のとき */ }

とか書くのかい?
ageは元々整数を表しているのに、わざわざ真偽を考え、0歳の時だけ特別扱いする意味はあるのかい?
そして、そういうことをして、一体どういうメリットが有るの?
405デフォルトの名無しさん:2007/10/28(日) 06:23:34
それ自体として観取されるのだから、もはや原義に遡及する根拠性はない。
406デフォルトの名無しさん:2007/10/28(日) 06:24:34
まだやってるよw
407デフォルトの名無しさん:2007/10/28(日) 06:44:49
C言語はboolを整数型で代用しているので、
同じ整数型でも、真偽として扱っている場合と、整数として扱っている場合がある。

例えば、int isdigit(int c) は 「cが10進数なら真の値を返す」 と有り、
これの戻り値は整数型だが、整数型で真偽を代用して返している。

一方、int strcmp(const char *cs, const char *ct) は、
「文字列 cs と 文字列 ct を比較する. cs > ct なら 0より大きい数,
cs < ct なら 0未満の数, 等しければ 0 を返す.」
とあり、「数」と言う言葉を使っていることからも分かるとおり、あくまで整数値を返す。

整数と真偽の区別も出来ないなんて、分別なさすぎ。味噌も糞も一緒なんだね。
そういう奴が、他人のコードに文句言ってるのがこのスレの実態なんだよね。

必ずしも分別が必要とは思わんが、物事の分別もつかないレベルのくせに、
他人のすることをいちいち評価しようとするなよな。
408デフォルトの名無しさん:2007/10/28(日) 07:02:58
409デフォルトの名無しさん:2007/10/28(日) 07:18:20
>>408
Cの標準関数の定義にも、整数型における整数と真偽の区別があるので根拠性はある。
isdigit は真偽を返すと明記してあり、strcmp は数を返すとしっかり明記してある。
むしろ、わざわざ、それに従わないようにする事に対する根拠やメリットの方が無い。
410デフォルトの名無しさん:2007/10/28(日) 07:25:48
コーディングスタイルについては、それらはC言語の定義の範疇には無いが、
一方、strcmpに関しては、C言語の定義に「数を返す」と書いてある以上、
数として評価すべきだと思うが、どうだろう。
どうして「数」をわざわざ真偽値とみなして評価する必要がある?何のメリットも無いのに。
411デフォルトの名無しさん:2007/10/28(日) 07:30:32
>>403
はいw
412デフォルトの名無しさん:2007/10/28(日) 07:34:00
>何のメリットも無いのに。
==0よりも!のほうが2文字少ないとか思ってたりして。

何も知らない初心者なら、たぶんstrcmp(a,b)==0と書くはずで、!strcmp(a,b)とは書かないだろう。
Webで見たか、本で読んだかわからないが、どこかで!strcmpという書きかたを見つけて
これがC流のやりかただと思いこんじゃったんだろうねえ。
定数を左におく書き方もおそらく同じだろう。
413デフォルトの名無しさん:2007/10/28(日) 07:35:06
漏れはアセンブラで書いてた時期が長いから
if(!age)
に全く抵抗がない
414デフォルトの名無しさん:2007/10/28(日) 07:36:05
>>413
JZ と JE を区別しないほうですか?
415デフォルトの名無しさん:2007/10/28(日) 07:37:06
JEがなかった頃から使ってますから
416デフォルトの名無しさん:2007/10/28(日) 07:38:26
strcmpは数を返すと定義してあるのに、わざわざそれを真偽値として評価し、
その結果、>>403に書いた、記述に一貫性が無くなるというディメリットを生んで、
一体何がしたいの?
それはつまり・・・・ヘタって事じゃないの?
お前らの嫌いな、わざわざ余計なことをしてディメリットを生む、いわゆる冗長性ってやつだろ。
これの場合はコードの冗長性というわけじゃなくて、思考の冗長性のことだけど。
417デフォルトの名無しさん:2007/10/28(日) 07:40:05
>>416
>その結果、>>403に書いた、記述に一貫性が無くなるというディメリットを生んで、

一貫性はある
バカにはそれがわからないだけ
418デフォルトの名無しさん:2007/10/28(日) 07:41:12
>>403
str1 > str2かどうか調べる時は strcmp(str1, str2) > 0 と書き、
str1 < str2かどうか調べる時は strcmp(str1, str2) < 0 と書き、
str1 >= str2かどうか調べる時は strcmp(str1, str2) >= 0 と書き、
str1 <= str2かどうか調べる時は strcmp(str1, str2) <= 0 と書くのに、

その通り

等しいかどうか調べる時は、!strcmp(str1, str2) と書くのは不自然じゃないか?

不自然じゃないです


また、if( !strcmp(str1, str2) ){} と書く奴は、等しくないかどうか調べる時には、
if( strcmp(str1, str2) ){} と書くのか?

はい
419デフォルトの名無しさん:2007/10/28(日) 07:43:35
>>418
どうして?
strcmpは「数」を返すと定義してあるのに、
どうしてわざわざ真偽値とみなして評価する必要があるの?
数が返ってくるのだから、数として評価すれば良いのでは?
わざわざ数を真偽値とみなして評価することが、どう不自然でないか説明してください。
420デフォルトの名無しさん:2007/10/28(日) 07:43:42
あたりめーじゃん
421デフォルトの名無しさん:2007/10/28(日) 07:48:38
>>418
あともう一つ聞きたいんだけど、
等しいかどうか調べる時は、!strcmp(str1, str2) と書くくせに、
str1 >= str2かどうか調べる時は、どうして
!(strcmp(str1, str2) < 0)
と書かずに、
strcmp(str1, str2) >= 0
と書くのですか?
strcmp(str1, str2) >= 0 と書くのなら、
等しいかどうか調べる時も、
strcmp(str1, str2) == 0
と書いた方が自然ではないですか?
422デフォルトの名無しさん:2007/10/28(日) 07:49:26
あたりめーじゃん
423デフォルトの名無しさん:2007/10/28(日) 07:49:31
>>418-419
おれは
strcmp(str1, str2) > 0 や strcmp(str1, str2) < 0 を使うケースは

if(strcmp(str1, str2) > 0){
hage
}else if(strcmp(str1, str2) < 0){
hoge
}else{ // !strcmp(str1, str2) == 0
huga
}

のときしかありえんからな
そもそも上のような議論の発生の余地がない
424デフォルトの名無しさん:2007/10/28(日) 07:51:57
>>423
実行速度を考えればそうだが、

>}else{ // !strcmp(str1, str2) == 0

はコメントがバグってる。
425デフォルトの名無しさん:2007/10/28(日) 07:52:02
整数と論理値を区別しない言語ってC/C++の他にある?

!strcmpがOKな人は、C/C++しか使わない人じゃないかと思うんだけど。
426デフォルトの名無しさん:2007/10/28(日) 07:52:15
>>421
str1 >= str2かどうか調べる時は、どうして
!(strcmp(str1, str2) < 0)
と書かずに、
strcmp(str1, str2) >= 0
と書くのですか?

どっちも使うよ
文脈に沿ったものを使う
427デフォルトの名無しさん:2007/10/28(日) 07:54:32
>>426
(strcmp(str1, str2) < 0)
が真偽値である以上、!(strcmp(str1, str2) < 0) は正しいんだけどね。
!strcmp(str1, str2) は相変わらず変だが。
428デフォルトの名無しさん:2007/10/28(日) 07:54:36
>>425
Perlも使ってるけどあっちのほうがめちゃくちゃ破綻してるだろ
429デフォルトの名無しさん:2007/10/28(日) 07:57:08
実際に書くかどうかはともかく
!strcmp(str1, str2)
の意味を瞬時に出来ない奴は素人か頭悪いだろ。
430デフォルトの名無しさん:2007/10/28(日) 07:57:19
いや、言語とか関係なく、C言語のstrcmpは「数」を返すと定義されている以上、
数として評価すべきでは?
ちなみに、isdigit は真偽を返すと定義してある。
こっちは if( !isdigit(c) ){} で問題ないが。
431デフォルトの名無しさん:2007/10/28(日) 07:59:34
>>428
perlはパズルみたいなものだから。
432デフォルトの名無しさん:2007/10/28(日) 08:01:31
こういう細部の趣味レベルの話でグダグダいってる奴の1万行くらいのプロジェクトのソース見てみたい。
もっと根本的な部分でおかしなソース書いてそう。
433デフォルトの名無しさん:2007/10/28(日) 08:29:05
>>432
些細なことを
些細なこととして切り捨てる人と
些細なことなので、優先順位の低い問題として考慮する人との差は
結構でかいよ
434デフォルトの名無しさん:2007/10/28(日) 08:47:39
これは「些細でかつ優先順位の低い問題」なんだよ
435デフォルトの名無しさん:2007/10/28(日) 08:51:13
そしてもっと優先順位の低い問題が、コーディングスタイルだ。
436381:2007/10/28(日) 08:56:28
俺は無視されてたのか…orz
437デフォルトの名無しさん:2007/10/28(日) 09:33:08
>>434
些細でかつ優先順位の低い問題だからこと
討論する場所は2chでいいんじゃないか?
438デフォルトの名無しさん:2007/10/28(日) 09:34:25
439デフォルトの名無しさん:2007/10/28(日) 10:05:30
f
440デフォルトの名無しさん:2007/10/28(日) 11:07:09
「コーディングスタイルなんて些細なことにはこだわらない」という奴に限って、
お前のコーディングスタイルはおかしいと言われると、こだわりまくってファビョる件について。
441デフォルトの名無しさん:2007/10/28(日) 11:15:24
/*
正常終了のときはNULL、異常終了のときはエラーメッセージを返します。
*/
char* Func()
{
}

442デフォルトの名無しさん:2007/10/28(日) 11:15:26
このスレの勢いを見ると、ここに参加してる奴でこだわってない奴なんていないと思うが。
本当にこだわってないなら、アホらしくて書き込みすらしないはずだ。
443デフォルトの名無しさん:2007/10/28(日) 11:47:18
「俺は拘ってない」と発言することで、何かが得られると勘違いしてるだけ
444デフォルトの名無しさん:2007/10/28(日) 12:13:55
GNU indentをデフォルトで通したスタイルが最高。
異論は認めない。
445デフォルトの名無しさん:2007/10/28(日) 12:30:57
実際何人いるんだろうね
ここ
446デフォルトの名無しさん:2007/10/28(日) 12:57:58
!strcmp()を理解できないバカが暴れまくってるね。
Cではboolの代わりに整数を使うとか、電波流しまくり。
ifとかwhileなんかの条件判断はboolではなくて、0か非0かを判断しているだけ。
あくまでも数値でしか判断してないの。

そこを理解できないから、頭が悪いと言われているのに。
バカの賛同者が誰もいないのがいい証拠。
447デフォルトの名無しさん:2007/10/28(日) 13:07:27
_Bool
448デフォルトの名無しさん:2007/10/28(日) 13:11:05
>>446
strcmp関数の仕様が「戻り値として0か非0を返す」となってたら別に問題なし
それ以外なら下らん自己満足のハックでしかないよ
449デフォルトの名無しさん:2007/10/28(日) 14:17:04
>>397


strcmp(str1, str2) は文字列に対する str1 - str2 の結果を整数値で
返しているのであって真偽を返している訳ではない。
で、(str1 - str2 == 0) は (str1 == str2) であり、str1 - str2 < 0 は str1 < str2 であるから

#define StrEq(s1, s2) !strcmp(s1, s2)

なんかより

#define STRCMP(S1,EQ,S2) (strcmp((S1), (S2)) EQ 0)

として、 if( STRCMP(s1, ==, s2) ) とか if( STRCMP(s1, <, s2) とか書くほうが良い。






いずれにせよ左辺値に定数を持ってくる奴はバカ。
450デフォルトの名無しさん:2007/10/28(日) 14:25:20
>>448
同意。

>>446
!strcmp() が理解できないのではなく、お前の思考回路が理解できない。
文字列 p の i 番目の要素にアクセスするときに
p[i] ではなく i[p] を使えとか言われても「バカか、こいつ」って思うだろ?
451デフォルトの名無しさん:2007/10/28(日) 14:29:49
左辺に定数を絶対に書くべきだ!と主張する奴と、
左辺に定数を絶対に持ってきてはいけない!と主張する奴は、

同程度にウザい
452デフォルトの名無しさん:2007/10/28(日) 14:30:04
>>409
!str.. は 整数比較の系ではないということだよ
453デフォルトの名無しさん:2007/10/28(日) 14:36:46
str..がどうこういうより、
ifが0か非0要求してんだろ
0==0は戻り値を返してることに気づけよ
454デフォルトの名無しさん:2007/10/28(日) 14:44:27
自分は書くときは、
if(strcmp(s,s2) == 0){}
だけど、人のコード読んでいても
if(!strcmp(s,s2)){}
を、ぱっと頭の中で切り替えることはできる。

でも、等しくない場合の
if( strcmp(str1, str2) ){}
これはダメ。コーディングミスと思って読み直してしまう。
(そして意図と合っていたことが判って愕然としてしまう)

#define StrEq(s1, s2) !strcmp(s1, s2)
はギリギリOKだけど、
#define STRCMP(S1,EQ,S2) (strcmp((S1), (S2)) EQ 0)
これはどうかと。
あまり俺様マクロを大量導入するとソースを引用するとき困るような。
455デフォルトの名無しさん:2007/10/28(日) 14:53:34
こだわりまくってる奴が多すぎてワロタ
456デフォルトの名無しさん:2007/10/28(日) 14:56:23
なんにも考えていない奴よりはマシだけどね。
457デフォルトの名無しさん:2007/10/28(日) 14:59:55
そうやって、STRCMPなんていう糞マクロを量産すると。
458デフォルトの名無しさん:2007/10/28(日) 15:01:44
どう考えても、
if (strcmp(s1, s2) == 0)とか、
if (strcmp(s1, s2) != 0)とかの方がreadabilityに優れてる。
459デフォルトの名無しさん:2007/10/28(日) 15:01:46
>>456
いいや、こだわりすぎの奴と何にも考えてない奴は、同等にクズ
460デフォルトの名無しさん:2007/10/28(日) 15:08:54
bool型が無いCが悪い
C++なら
if ( s1 == s2 )だけでいいのに
461デフォルトの名無しさん:2007/10/28(日) 15:16:14
ifがbool受け取るってのが固定観念
Cのifが0か非0受け取るのは、意図してやってることだし
462デフォルトの名無しさん:2007/10/28(日) 15:25:09 BE:631296746-2BP(125)
>>458
漏れもそう思って、そういうスタイルに戻した。
前は
if(!strcmp(s1, s2)
とか
if(!fp)
とか書いてたけど。
463デフォルトの名無しさん:2007/10/28(日) 15:26:31
議論があまりにも高度すぎて眩暈がしてくる
464デフォルトの名無しさん:2007/10/28(日) 15:28:19
ちょっと待て、strcmpは"0"か"正"か"負"を返すのであり、"数"を返すわけでは無い
strcmpの返す値を、"0"より"大きい"のか"小さい"のか"等しい"のかで比べる以外に使用するのはナンセンスだろ

また、Cの場合、intが整数型だから、返ってくる値が、整数だなんて思うのはとんでもない誤解
Cにはboolenは無く、bool値の定義は、「0以外は真である」となっている

故に、文字列が等しいのか等しくないのかを判断するのに、not演算子を使うのは妥当(数に意味が無いのであれば、boolと同じ)
465デフォルトの名無しさん:2007/10/28(日) 15:29:31
議論があまりにもループし過ぎてて目が回った。
466デフォルトの名無しさん:2007/10/28(日) 15:31:31
while で無限ループを表現したい場合はどう書くの?

「0か非0」ということに拘るのであれば

while (-1) {
}
なんてのは -1 に意味がないから駄目で、

あくまで
while (! 0) {
}
と書くべきという主張?
467デフォルトの名無しさん:2007/10/28(日) 15:33:15
-1、!0どっちにしたって
whileの仕様知ってなきゃ可読性も糞もねえな
ifも然りだ
468デフォルトの名無しさん:2007/10/28(日) 15:34:23
と、何も考えていない>>459は自己正当化を頑張るのでした。
どんとはらい。
469デフォルトの名無しさん:2007/10/28(日) 15:47:39
-1をtrue(=非0)として扱うことは問題ないと思うのでOKかと。
もちろん逆は駄目なので、
#define TRUE -1
とか問題外だが。

個人的に無限ループは
for(;;){
が好き。
470デフォルトの名無しさん:2007/10/28(日) 15:48:46
>>466
...正気か?
「0以外は真」であると定義されている
whileは、条件が真の間ループする

で、-1は真なの偽なの?
471デフォルトの名無しさん:2007/10/28(日) 15:52:17
>>458
readabilityは上がるだろうけど
if (!strcmp(s1, s2))が読めるものにとっては
読みやすさは下がると思うのよ
単語全てを日本語に頑張って翻訳している技術書の翻訳本みたいな
472466:2007/10/28(日) 15:52:40
ん、最初に立場を書いておかないと誤解を招くかな。

自分は if (!strcmp(s1,s2)) で構わないと思う派。
これが不自然だという人は、while の時にどう書くのだろうと。
473466:2007/10/28(日) 15:53:54
>>449
>strcmp(str1, str2) は文字列に対する str1 - str2 の結果を整数値で

これ本当ですか?たとえば

strcmp(s1, s2) = -1 * strcmp(s2, s1)

って仕様で保証されているの?
474デフォルトの名無しさん:2007/10/28(日) 15:56:11
while (1) {...}は、Cではイディオムだろ・・・
475デフォルトの名無しさん:2007/10/28(日) 15:57:05
>>471
readabilityと読みやすさはどう違うんだ?
476デフォルトの名無しさん:2007/10/28(日) 15:59:40
477デフォルトの名無しさん:2007/10/28(日) 15:59:51
>>464
if (strcmp(s1, s2) != 0)と書くのはナンセンスで、
ret = strcmp(s1, s2);
if (ret < 0 || ret > 0) {}
と書けということだね。
478デフォルトの名無しさん:2007/10/28(日) 16:00:57
スレ立ててきたから続きはあっちでやれ

コーディングスタイルにこだわるスレ
http://pc11.2ch.net/test/read.cgi/tech/1193554741/
479デフォルトの名無しさん:2007/10/28(日) 16:02:12
>>471
あのさー、if (!strcmp())は、知らない人間でもちょっと考えれば読めるけど、
誰でもノーストレスで読めるように書きましょうっていうのが、可読性を上げましょうってことなんだけど。
480466:2007/10/28(日) 16:06:35
>>479

!strcmp(s1, s2) と
strcmp(s1, s2) == 0

で読みやすさに違いがあるってのは鈍いだけでは?

strcmp(s1, s2)
strcmp(s1, s2) != 0

これだったら上の方がノーストレスで読めたりとか。
「否定演算」の理解に 1 クロックを要する人ってだけな気がする。
481デフォルトの名無しさん:2007/10/28(日) 16:07:08
ちゃんとしたコーディングスタイルでかかれてないコードって、正しく
・ぱっと見て「ヘタだなぁ」と思うコード
だと思うけどね。

なんで、このスレで話す内容であっている。
コーディングスタイル以外の話がしたければ、自分でネタを振ればOK。
482デフォルトの名無しさん:2007/10/28(日) 16:07:26
strcmpって意味からしてpredicateの一種だと思うんだけど、それなら
if (strcmp(s1,s2))
だけで正確な動作が保証されてしかるべき
483デフォルトの名無しさん:2007/10/28(日) 16:11:07
なにか有益な議論を交わしていると勘違いしている奴は
絶対誘導されないし意地でも居座り続けるの法則。
484デフォルトの名無しさん:2007/10/28(日) 16:13:26
C/C++の組み込みキーワードに高い抽象性を求めても
一貫性がないだろって話
485デフォルトの名無しさん:2007/10/28(日) 16:14:12
しかし、せっかく作られた向こうのスレは早くもネタ化してるしな・・・
486デフォルトの名無しさん:2007/10/28(日) 16:15:37
strcmp なんて使ってるやつはバカです
487デフォルトの名無しさん:2007/10/28(日) 16:19:37
488デフォルトの名無しさん:2007/10/28(日) 16:19:37
2ch のスレは free できないのだから
プログラマならスレ立てに慎重であってしかるべき。
489デフォルトの名無しさん:2007/10/28(日) 16:21:50
ともかく晒すだけでなく突っ込んで議論(笑い)したい奴はあっちでやりなよ。
490デフォルトの名無しさん:2007/10/28(日) 16:25:37
同じような処理を何度も書いてる冗長なコードは一目見て「下手だなぁ」と思うよね。
まるでこのスレのような。
491デフォルトの名無しさん:2007/10/28(日) 16:26:44
スタイルにこだわる奴よりも痔地中の奴のほうがキモイな。
492デフォルトの名無しさん:2007/10/28(日) 16:32:36
キモいとか言ってるやつが一番キモい
493デフォルトの名無しさん:2007/10/28(日) 16:35:42
>>1によると

禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名

らしいよ
494デフォルトの名無しさん:2007/10/28(日) 16:36:09
492は自分がキモイことを認めたのか。
偉いな。
491も自覚しろよw
495デフォルトの名無しさん:2007/10/28(日) 16:37:56
現実で見た奴だと、
・main関数しかない
・変数名がa,b,c,...
だな

ちなみに、zまで逝った後はaa,ab,ac,...な
496デフォルトの名無しさん:2007/10/28(日) 16:39:35
難読化だね
497デフォルトの名無しさん:2007/10/28(日) 16:40:40
>>496
言っとくが仕事で見たんだぜ?
半端ねぇよ
498デフォルトの名無しさん:2007/10/28(日) 16:42:23
コボラーにはよくあること
499デフォルトの名無しさん:2007/10/28(日) 16:45:55
>>498
まあ、だから、構造化プログラミングってのが考え出されたんだけどな...
肝心のコボラーに伝わってないんだよな...
500デフォルトの名無しさん:2007/10/28(日) 16:48:41
領域の初期化で

data[0]=0;
data[1]=0;



data[1022]=0;
data[1023]=0;

ってのがあった。これは酷い、と思ったらもう1箇所初期化処理があって

data[1024]=0;



501デフォルトの名無しさん:2007/10/28(日) 16:51:52
それを

std::fill(data, data+N, 0);

とか修正すると

data[238] = 4;

を見落としたりするんだろうか
502デフォルトの名無しさん:2007/10/28(日) 16:57:18
>>495は自分しかメンテできないようにして仕事を確保。
>>500は行数を稼いで売上げアップ。
を狙ったのかな?
503結局:2007/10/28(日) 17:15:20
比較での右定数には利点がない
でおk?
504デフォルトの名無しさん:2007/10/28(日) 17:19:16
>>503
比較での左定数にはなんの意味もないが正解
505500:2007/10/28(日) 17:23:34
>>502
作った人によると、処理の高速化を狙ったんだそうです。
506デフォルトの名無しさん:2007/10/28(日) 17:27:06
>>505
それは面白い!
その人に座布団一枚やってください
507デフォルトの名無しさん:2007/10/28(日) 17:27:37
>>503-504
hoge==0だろうが0==hogeだろうが大して見易さ変わらないんだから
どっちでもいいんじゃないかと思うんだが
508デフォルトの名無しさん:2007/10/28(日) 17:35:40
>>507
貴様が一人でコーディングして、自分だけで使うプログラムなら、その通り好きにしたらしい。
509デフォルトの名無しさん:2007/10/28(日) 17:38:00
if (strcmp(str1, str2) > 0) {
 hage
} else if (strcmp(str1, str2) < 0) {
 hoge
} else {
 huga
}
510デフォルトの名無しさん:2007/10/28(日) 17:40:14
>>505
次からは、その様なコードを見つけたとき、作った人を最大限に褒め称え
自分にはこの様な天才的コードを保守する自信は無いと辞退しましょう
恐らく作った本人が鼻高々で保守してくれることでしょう

そして、その様にすれば、その様な天災的コードが他のプロジェクトに出現しにくくなります
天災的コードの保守は天災的コードを書いた本人が保守するのですから...
511デフォルトの名無しさん:2007/10/28(日) 17:41:28
>>500
俺ならそのコードを生成するのに使うPerlなんかのスクリプトのコードをコメントに残しておくな。
これで保守性がかなり高まる。
512500:2007/10/28(日) 17:43:03
>>510
>作った本人が鼻高々で保守
プロジェクト全体のことを考えるとそれはそれで困るw
513デフォルトの名無しさん:2007/10/28(日) 17:46:24
○見やすい
○醜い・・・じゃ無かった、見難い

これは主観によるものが大きいだけに、論争しても決着は付かない気がする。
例えるなら、ツートップ横のじゃんがらラーメンは美味しいか?不味いか?
くらいバカげている。そんなの、好みやん!

「見やすい」「見難い」 というのでは無く、「メリット」「デメリット」
「○○防止のため」 などのような、主観に影響されない事で論争して頂きたい。
514デフォルトの名無しさん:2007/10/28(日) 17:46:50
>>512
違う違う、その様な天災的コードが、無限に増殖することよりもマシだと考えるんだ
515デフォルトの名無しさん:2007/10/28(日) 17:52:25
>>513
いつまで引っ張ってんだよ。
一人でやってろ、クズ
516デフォルトの名無しさん:2007/10/28(日) 17:52:47
>>513
まぁ、左右定数の「見やすさ」に関しては似たり寄ったりだしな

「左に定数持ってくればコーディングミス防止になる」が最近の開発環境じゃ
意味がないって言うなら、いくら熱弁したところで好みの問題でしかない
517デフォルトの名無しさん:2007/10/28(日) 17:57:20
>>513
それぞれについての、客観的なメリット・デメリットを語ってください。
518デフォルトの名無しさん:2007/10/28(日) 18:00:26
だからそのメリットデメリットがないから議論自体が不毛だと言っとんじゃゴルァ
いつまで定数で引っ張るじゃモルァ
519デフォルトの名無しさん:2007/10/28(日) 18:01:25
じゃ、去れ
520デフォルトの名無しさん:2007/10/28(日) 18:02:37
前スレで、if (a >= 0)が読めないとか言ってたやつ、よっぽど悔しかったんだろうなぁ。

お前、何レスしてんだよwww
521デフォルトの名無しさん:2007/10/28(日) 18:03:05
if(!(pFilePointer=fopen(strhogehoge,"r"))){puts("ちょうおま");}みたいなのは邪道か
522デフォルトの名無しさん:2007/10/28(日) 18:05:40
>>517
左定数だと=と間違えたときにどんなコンパイラでもエラーになるYO
523デフォルトの名無しさん:2007/10/28(日) 18:06:08
なんで、if ((p = fopen()) != NULL) {}と書かないのかがわからない。
524デフォルトの名無しさん:2007/10/28(日) 18:07:15
>>509
それ、ビミョーだね。

int cc = strcmp(str1, str2);
if (cc > 0) {
 hage
} else if (cc < 0) {
 hoge
} else {
 huga
}

こう書けば strcmp は1回しか評価されない。
シビアな面ではパフォーマンス改善につながるかもしれない。
だが1行増える、捨て変数が1個増える。書くのメンドクサイ。
トレードオフだね。
たまたま strcmp が例だけど、副作用のある関数ならアウトかも。
ケースバイケースだね。
525デフォルトの名無しさん:2007/10/28(日) 18:08:10
それ本気で言ってんの?
526デフォルトの名無しさん:2007/10/28(日) 18:14:04
このスレはもう手の施しようがないかもしれない
527デフォルトの名無しさん:2007/10/28(日) 18:14:53
そこで関数のメモ化ですよ
528デフォルトの名無しさん:2007/10/28(日) 18:15:06
こんなのC初めて三日の知識で参加できちゃうからなぁ
529デフォルトの名無しさん:2007/10/28(日) 18:15:09
>>509がビミョーとかいう奴は、プログラマ辞めちゃってください。
530デフォルトの名無しさん:2007/10/28(日) 18:15:45
531デフォルトの名無しさん:2007/10/28(日) 18:18:15
記述スタイルに拘らない奴って、プログラマの資質が無いと思う。
532デフォルトの名無しさん:2007/10/28(日) 18:18:44
定数の話は、あえて言うならプロジェクト内で統一しとくと読みやすくなるかもしれない
そこまでする必要があるかは疑問だが
533デフォルトの名無しさん:2007/10/28(日) 18:18:59
「今日はつかれてるから左に置いてみるわ」とかはかんべんして欲しい
534デフォルトの名無しさん:2007/10/28(日) 18:21:00
>>524
副作用のある関数ってこういう事?

if (read(fd, buf, 80) > 0) {
 通常処理
} else if (read(fd, buf, 80) < 0) {
 エラー処理
} else {
 クローズ処理
}

さすがにこんなマヌケなコードを書くヤツはおらんと思うが
変な悪いクセをつけないためにも、普段から >>524 みたいな
書き方をしとくべきだろうね。
535デフォルトの名無しさん:2007/10/28(日) 18:22:00
俺は定数を左に書く、とかいう困ったちゃんが一人二人いるかもしれないから、
コーディング規約があるんだよ・・・
536デフォルトの名無しさん:2007/10/28(日) 18:23:27
そういや、空行は嫌いだって奴がいて、一切の空行を入れなかった奴がいたなぁ・・・
537デフォルトの名無しさん:2007/10/28(日) 18:23:33
>>532
if(0==a)なんて書いて悦に入るアホが出てきたら明文化すればいいよw
538デフォルトの名無しさん:2007/10/28(日) 18:26:10
うちの会社、なんとかかんとかっていう変数の頭にnだのlだのcだのつける
書き方が規約になってる

Cのときはまだいいんだが、クラスが基本のJavaとかになるとどうするよって感じになる
539デフォルトの名無しさん:2007/10/28(日) 18:27:33
>>538
うぜーーーー








お前が
540デフォルトの名無しさん:2007/10/28(日) 18:27:41
↓こんなスレ立てたのは、このスレの住人やろ?

コーディングスタイルにこだわるスレ
http://pc11.2ch.net/test/read.cgi/tech/1193554741/
541デフォルトの名無しさん:2007/10/28(日) 18:28:23
「彼」が飽きるまで放置するもよしかまってやるもよし。好きにしれ
542デフォルトの名無しさん:2007/10/28(日) 18:28:39
>>539
馬鹿は無駄な空行を入れたがる
543デフォルトの名無しさん:2007/10/28(日) 18:29:12
>>538
java には java の規約がありますよ。
C には C の規約。
544デフォルトの名無しさん:2007/10/28(日) 18:30:14
なになに?
次は版画利案の是非をやりたいの?
545デフォルトの名無しさん:2007/10/28(日) 18:31:36
lplplplpszMachineName(笑
546デフォルトの名無しさん:2007/10/28(日) 18:34:17
>>543
うちもある
だが、何を考えたのかなんとかかんとかをJavaでも使えと書いてある
547デフォルトの名無しさん:2007/10/28(日) 18:34:28
if (...) {
 ・・・
} else {
 ;
}
548デフォルトの名無しさん:2007/10/28(日) 18:35:09
>>546
じゃぁ使えよ
549デフォルトの名無しさん:2007/10/28(日) 18:35:15
このスレの人がvoid main()を見たら発狂したりするんだろうか
550デフォルトの名無しさん:2007/10/28(日) 18:36:11
sizeof(variable)とかreturn (code)とかも好きそうだ。
551478:2007/10/28(日) 18:38:26
>>540
さあ?違うんじゃない?
552デフォルトの名無しさん:2007/10/28(日) 18:38:35
コンパイルエラーで誤代入を阻止できると言うが
C/C++系以外で、誤代入が問題になることってあるの?

BASICやPASCALでは誤代入にならないよね?
左辺に定数を置く人って、BASICやPASCALでも左辺に定数を置くの?
仮に、BASICやPASCALで左辺に定数を置くとして、それには、何か意味があるの?
553デフォルトの名無しさん:2007/10/28(日) 18:39:25
見やすい
554デフォルトの名無しさん:2007/10/28(日) 18:39:56
>>540
>>478が得意そうに立ててました。
しかし、もはやネタスレw

555デフォルトの名無しさん:2007/10/28(日) 18:40:42
>>553
それは主観。
556デフォルトの名無しさん:2007/10/28(日) 18:41:29
だから何?
557デフォルトの名無しさん:2007/10/28(日) 18:42:14
左定数 VS 右定数って、喫煙 VS 嫌煙くらい不毛な気がする
558デフォルトの名無しさん:2007/10/28(日) 18:43:46
右も左も定数にすれば丸く収まるんじゃね?
559デフォルトの名無しさん:2007/10/28(日) 18:45:32
if(a==定数 && 定数==a)
560デフォルトの名無しさん:2007/10/28(日) 18:45:48
ケースバイケースで見やすい方にすりゃいいだろ、が普通の人の考え

× 左定数 VS 右定数
○ 定数位置固定派 VS 臨機応変派
561デフォルトの名無しさん:2007/10/28(日) 18:47:13
×普通の人
○ドシロート
562デフォルトの名無しさん:2007/10/28(日) 18:48:26
>>561
左定数アレルギーでも持ってるのか、お前は
563デフォルトの名無しさん:2007/10/28(日) 18:52:05
このスレ見返したら>>1から延々と定数バトルやってて笑った
564デフォルトの名無しさん:2007/10/28(日) 18:52:17
なんだよ、これ。読めねーよwww
565デフォルトの名無しさん:2007/10/28(日) 18:52:20
>>511
多分>>500のプログラムはExcelで作ったんだろうと思われ。
566デフォルトの名無しさん:2007/10/28(日) 18:52:57
不等号の時は if (0 <= a && a <= 10) って書く
567デフォルトの名無しさん:2007/10/28(日) 18:53:09
malloc-freeのほうが面白いな。
568デフォルトの名無しさん:2007/10/28(日) 18:54:06
>>566
俺もそう書く
高校の頃の数学の癖がそのまま残ってる
569デフォルトの名無しさん:2007/10/28(日) 18:54:38
ここまでで得られた有益な情報・・・0
570デフォルトの名無しさん:2007/10/28(日) 18:55:54
有益な情報を得ることを期待してこのスレを開くってのは
そもそも情報の探し方がヘタだなぁ
571デフォルトの名無しさん:2007/10/28(日) 18:56:36
ここは専門学校生が暇を潰すスレです
572デフォルトの名無しさん:2007/10/28(日) 18:57:20
定数の話題を振ってる奴はこのスレをつぶしたいに違いない
573デフォルトの名無しさん:2007/10/28(日) 18:57:34
ごめん修士持ってるけど暇潰してるや。
てかネトゲしながら画面半分でこのスレ開いてるんだぜ。我ながら時間無駄すぎ
574デフォルトの名無しさん:2007/10/28(日) 18:59:35
何重にもキモい
575デフォルトの名無しさん:2007/10/28(日) 18:59:36
>>468
自己正当化に必死なのは、あきらかにお前だろw
576デフォルトの名無しさん:2007/10/28(日) 19:02:26
>>508
貴様が一人でコーディングして、自分だけで使うプログラムじゃないなら、

そんな瑣末なことに文句を付けるな。協調性のかけらもないクズ
577デフォルトの名無しさん:2007/10/28(日) 19:03:14
論理破綻
578デフォルトの名無しさん:2007/10/28(日) 19:04:45
>>577
お前が名w
579デフォルトの名無しさん:2007/10/28(日) 19:06:57
こいつらの各コードがウマイわけがない
580デフォルトの名無しさん:2007/10/28(日) 19:07:54
臨機応変に考えられない頭の固い奴が、よくプログラミングなんかできるなぁ。

「定数は絶対左じゃなきゃダメだ!」とか、潔癖症すぎんだろ。
581デフォルトの名無しさん:2007/10/28(日) 19:08:42
段々アホが絞られてきたな
582デフォルトの名無しさん:2007/10/28(日) 19:08:50
間違えた。ここで喚いているバカは、定数右派だった。

「定数は絶対右じゃなきゃダメだ!」
583デフォルトの名無しさん:2007/10/28(日) 19:08:53
俺は取り敢えずVB6の括弧なしスタイルが気に入らない
584デフォルトの名無しさん:2007/10/28(日) 19:11:37
滑稽を通り越して、痛い領域にまで達したようです。
585デフォルトの名無しさん:2007/10/28(日) 19:12:16
このスレの1からじゃなくて、前スレの後半からずーっとこうだぞ。
バカってすぐ必死になるから性質が悪いよね。
このスレで得られた情報…0
無駄にした時間…priceless
586デフォルトの名無しさん:2007/10/28(日) 19:12:32
うむ、定数は絶対に右とか言い出す奴だから、痛いのはしょうがない
587デフォルトの名無しさん:2007/10/28(日) 19:14:47
ほうほう、if (a >= 0)を語順に読み下せない奴が修士持ってて、ネトゲしながら暇つぶしで2chをやってると。
で、そいつの会社は技術力が高くて、仕事がどんどん来ると。
588デフォルトの名無しさん:2007/10/28(日) 19:18:29
このスレを「絶対」で検索すると面白いよ。
被害妄想強すぎー。
589デフォルトの名無しさん:2007/10/28(日) 19:19:55
if (a >= 0)

if (0 < a)

どっちも書きうるな。

どっちかしか認めないとか言われたら、「アホかお前」って普通に言っちゃいそう
590デフォルトの名無しさん:2007/10/28(日) 19:22:29
>>589
アホかお前
591デフォルトの名無しさん:2007/10/28(日) 19:23:10
>>590
どうみてもアホはお前
592デフォルトの名無しさん:2007/10/28(日) 19:24:01
そんなこと誰も言ってないのに。
被害妄想強すぎー。
593デフォルトの名無しさん:2007/10/28(日) 19:25:25
被害妄想で検索すると、一番被害妄想の強いバカが炙り出されるよ
594デフォルトの名無しさん:2007/10/28(日) 19:25:38
お前らは
「馬〜鹿、ア〜ホ!」
「馬鹿って言った方が馬鹿なんですぅ〜!」
とか言い合ってる消防か
595デフォルトの名無しさん:2007/10/28(日) 19:26:47
ぱっと見てヘタだなぁと思うコードスレは小学生の集う社交場ですから
596デフォルトの名無しさん:2007/10/28(日) 19:30:24
>>552
=を:=と間違える人はいないんじゃないかな?
それでも左定数にするけど。
理由は「右定数には利点がない」。

不等号は臨機応変だね。
597デフォルトの名無しさん:2007/10/28(日) 19:35:22
あれ?
587が前スレの815で、if (a >= 0)が読めないからif (0 <= a)が優れているって主張している奴だよね?
598デフォルトの名無しさん:2007/10/28(日) 19:36:33
>>595

             , -''":::::::::::::::::::::::`` ‐ 、' :,
              ,:/:::::::::::::;;;;;: -――‐- :;;;;;;`ヽ、
         ,:'/:::::::::::::::::/u      ,  ,  ``-;ヽ
         ,:':/:::::::::::::::::/  '⌒`ー‐'| | |`ー-‐、u|::| なんで僕が小学生だと分かった…
        ,:'/:::::::::::::::::/u /⌒ヽ     /⌒ヽ !::! ;
       ,' l--、:::::::/   l  O | lj  | O | '、l ,:
       /´,―、ヽ:/     ヽ、,r‐'-、:::::::::ゝ--く  l ;
     .;'/ /ニ_ノ |   ..::::::::{  r,、 ヽ / ,r-, ノ::.. '、;
     ; | l  '-,        / ヽ !},. ---'し'_,ヘ   :..ヽ':,
       ':,!  `‐'   u ヽ  ,. -'"´_,. ----,、 ヽ、u  l ;
        ':,ヽ_ノ u   ノ'" ,. -''" ̄ ̄ ̄ ヽ. ヽ  |
        .,: | lj      /  /_,. ---、,. -----、|  |  / ;.,
    --―'ヽ     /  '-------―――‐''" ノ /``ー- 、_
599デフォルトの名無しさん:2007/10/28(日) 19:49:57
すべては、多分このへんから始まった・・・

ぱっと見て「ヘタだなぁ」と思うコード その5
http://pc11.2ch.net/test/read.cgi/tech/1155315371/

661 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/21(日) 12:55:31
 定数を左辺に持ってくる比較文を見るとイラッとするな。
 あと、java限定だけど、"".equals(str)とか見たときだな。

685 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/21(日) 23:01:40
 if ("・・・".equals(str))の方が分かりやすいって人は、
 if (str == null) よりも、if (null == str)の方が分かりやすいのかな。

713 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/22(月) 16:00:31
 だけどさ、
 if( ! hogehoge_func() ){}
 とは、みんな書くんだろ?

 if( hogehoge_func() ! ){}
 とは書けないもんな、これは文法エラーだし。

 だったら、
 if( NULL != hogehoge_func() ){}
 でも良いんじゃね? ってならない?
600デフォルトの名無しさん:2007/10/28(日) 19:52:16
右定数or左定数に拘ってる奴だけに質問。
左定数or右定数を見たら、他に理由が無くても直す?

これでyesと答えたら阿呆確定だな。
601デフォルトの名無しさん:2007/10/28(日) 20:04:59
左定数でコード書くやつ結構いて、もう見慣れたということもあるので、
あんまり違和感はないなぁ。自分でコード書くときは、右定数で書くけど。
strcmpも自分では、strcmp()==0と書くけど、!strcmpももうなれた。

だが、

if (MicrosoftFunctionDoSomething(dwParameterForSomething, pbBufferPointerToSomething,.............................) {
dwParameterForSomething =...

ってやつは、いつまでもなれることが出来ない。
602右派:2007/10/28(日) 20:05:24
>>600
わざわざ直したりはせんな。
なんで小便もらしたヤツの小便を俺が掃除せにゃいかんの?って感じ。
でも見ていて不愉快。
603デフォルトの名無しさん:2007/10/28(日) 20:10:39
>>600
動作実績があるコードを自分の好みで書き換え、
蟲が入り込む余地をつくるようでは
プログラマ失格だろう。

左定数の利点としてもう一点
書き手は代入する意思がないということが明確
604デフォルトの名無しさん:2007/10/28(日) 20:12:45
>>603
まだ言うか。その理屈はとっくに論破されとる!
605デフォルトの名無しさん:2007/10/28(日) 20:14:18
論破も何も事実だろう
606デフォルトの名無しさん:2007/10/28(日) 20:15:08
ってループしてたか・・・orz
607デフォルトの名無しさん:2007/10/28(日) 20:25:33
>書き手は代入する意思がないということが明確

というのが仮に正しいとしても、こんな小さな理由で
多くの人の慣用的な書き方と反して、自分のスタイル
を押し通すというのは、無茶なんじゃないかな。

多くの人が読みやすいと思うようなコードって、多くの人が
慣用的に使うロジックをちゃんと使っているコードだと思うのよね。

全然違う例だけど、ふつう次のように書くところを
for (p = top; p != NULL; p = p->next){
}

次のように書くと、
p = top;
while (p) {
/*...*/
p = p->next;
}

「ん?何かこうした理由があるのかな?」と読み手に余計な苦労を強いる。
608デフォルトの名無しさん:2007/10/28(日) 20:27:39
IF分の中で代入ってどうよ?
609デフォルトの名無しさん:2007/10/28(日) 20:28:24
「ふつう」と書く奴にろくな奴がいないの法則を補強するだけのレスだったな。
610デフォルトの名無しさん:2007/10/28(日) 20:29:30
ループスレ!

  ループスレ!

    ループスレ!
611デフォルトの名無しさん:2007/10/28(日) 20:30:55
>>609
そう思うとしたら、あなたの経験が足りないからだと思うぞ。
612デフォルトの名無しさん:2007/10/28(日) 20:34:53
処理速度を重視するとグローバル変数だらけになる
見辛くてしょうがない
613デフォルトの名無しさん:2007/10/28(日) 20:35:44
>>599
"".equals(str)はOKだろ。
str!=null && str.equals("")は面倒くさい。
614デフォルトの名無しさん:2007/10/28(日) 20:36:41
このペースだと、明日中にはスレを使い切るなw
615デフォルトの名無しさん:2007/10/28(日) 20:39:36
>>607
「思う」ではダメだ。
右定数が優れているという確実な根拠が欲しい。

for (p = top; p != NULL; p = p->next)
for (p = top; NULL != p; p = p->next)
大して変わらん。
616デフォルトの名無しさん:2007/10/28(日) 20:40:52
だから好みの問題じゃないのか
617デフォルトの名無しさん:2007/10/28(日) 20:42:24
左定数は利点が提示されているでそ
618デフォルトの名無しさん:2007/10/28(日) 20:42:34
縦書きの日本語の文章をインクで手が汚れないから合理的だと
左から書いていく奴は一般的に基地外と呼ばれます。
619デフォルトの名無しさん:2007/10/28(日) 20:43:37
>>618
まるで関係のない例を無理やり定数の話に結び付けようとしてるお前が基地外だろ
620デフォルトの名無しさん:2007/10/28(日) 20:46:53
>>615
for (p = top; p != NULL; p = p->next)
for (p = top; NULL != p; p = p->next)

こうして見比べると、良い・悪いは別として、右定数の方が美しいよねぇ。
621デフォルトの名無しさん:2007/10/28(日) 20:46:55
>>619
ということにしたいのですね。
622デフォルトの名無しさん:2007/10/28(日) 20:47:17
>>621
どう関係があるのか説明してみろYO
623デフォルトの名無しさん:2007/10/28(日) 20:47:29
>>618
それは読み手が巻物を右手で巻きながら読むからだろ。
コードも読み手のことを考えて書かないと。
624デフォルトの名無しさん:2007/10/28(日) 20:47:48
>>618
一方、俺はティッシュを使った
625デフォルトの名無しさん:2007/10/28(日) 20:50:07
>>620
100%主観です。
626デフォルトの名無しさん:2007/10/28(日) 20:50:10
>>623
627デフォルトの名無しさん:2007/10/28(日) 20:50:19
なんか美しいとかstrict htmlスレみたいになってきたな
628デフォルトの名無しさん:2007/10/28(日) 20:51:03
左定数は利点があるが、その利点は無いに等しいというのは論破済み。
しかし客観的に見て左定数に弊害があるわけでもないのだから、
好きにすれば良い。
どちらかに拘る奴が基地外だろう。
なァ、>617,618
629デフォルトの名無しさん:2007/10/28(日) 20:52:13
プロジェクト内でわざわざ多数派の逆を行く奴がいると
こいつはアホなのか経験が足りないのか珍論振りまくオナニー野郎なのか
判断に迷って不安に陥るのでやめてください。
630615:2007/10/28(日) 20:54:11
欲求不満ですw
631デフォルトの名無しさん:2007/10/28(日) 21:00:04
>>629
普通、既存のソースを修正するときは既にある書き方に倣うだろ
そこで自己主張する奴は、たとえ元の書き方より良かったとしても阿呆
ソースが非常に読みづらくなる
632デフォルトの名無しさん:2007/10/28(日) 21:09:06
第三者が読む可能性のあるソースコードでなおかつ業務において
基地外なことをするつもりがない。
ということであればもう特に何も言わないよ。
匿名掲示板で好きなだけ吠えていてくれればよい。
633デフォルトの名無しさん:2007/10/28(日) 21:09:43 BE:157824623-2BP(125)
>>607
その例はたしかに下だと気持ち悪いね。
上だと「ああリストを処理していくんだな」というのがすぐわかる。
634デフォルトの名無しさん:2007/10/28(日) 21:16:19
左辺に定数を置く奴の、箸の使い方は相当下手だろうね
豆をつかめって言っても豆刺してそう...
635デフォルトの名無しさん:2007/10/28(日) 21:19:41
所詮、両方ともが変数だったらどうしようもないんだから
片側が定数の時だけ特別ルールで拘るのも面倒
636デフォルトの名無しさん:2007/10/28(日) 21:29:49
>>633
Pascalならどうする?
637デフォルトの名無しさん:2007/10/28(日) 21:33:29
>634
そーいうお前は、海外、特に欧米でも同じ事言って
白い目で見られたりする奴なんだろうなァ。
638デフォルトの名無しさん:2007/10/28(日) 21:42:43
>>615
そこまでこだわるんだったら、せめてマクロで隠蔽するほうがいい。

#define list_for_each(top, entry) \
for (entry = top; NULL != entry; entry = entry->next)

list_for_each(top, p) {
/*...*.
}
639デフォルトの名無しさん:2007/10/28(日) 21:44:18
640デフォルトの名無しさん:2007/10/28(日) 21:45:25
641デフォルトの名無しさん:2007/10/28(日) 21:46:24
今度はマクロの可読性ネタですか?!
642デフォルトの名無しさん:2007/10/28(日) 21:46:36
ぱっと見て「ヘタだなぁ」と思うコードの例
>>638
643デフォルトの名無しさん:2007/10/28(日) 21:47:20
>>638みたいなマクロ使うのはマジでやめて欲しい
左定数と右定数が混ざってるほうがまだマシ
644デフォルトの名無しさん:2007/10/28(日) 21:48:08
#define unless(exp) if(!(exp))
#define loop for(;;)
645デフォルトの名無しさん:2007/10/28(日) 21:49:45
>>638
氏ね
646chirashi:2007/10/28(日) 21:49:46
GNUのhello.cはひでぇよなぁ
647デフォルトの名無しさん:2007/10/28(日) 21:54:38
#define begin_block do
#define end_block while ( 0 )
#define exit_block break
648デフォルトの名無しさん:2007/10/28(日) 21:58:44
おいおい、一体何が起きてるんだよ。

と、1を見ながらレスしてみる。
649デフォルトの名無しさん:2007/10/28(日) 22:00:07
#define pf printf
#define gs gets
#define i int
#define c char
#define l long
650638:2007/10/28(日) 22:01:09
意外なコメントだらけでワロタw
651デフォルトの名無しさん:2007/10/28(日) 22:05:15
>>607
前者でも後者でも違和感無いけど。
後者が特に劣っているとも感じない。
652デフォルトの名無しさん:2007/10/28(日) 22:19:55
Cしか使ったことないんじゃないかな?
forだとcontinue使えて「便利」くらいしか差がないと思うが。
653デフォルトの名無しさん:2007/10/28(日) 22:42:32
>>638

これはひどい。
祭りの予感・・・

つか、明日は月曜日だぞ。また徹夜させる気かよ。かんべんしてくれ!
654デフォルトの名無しさん:2007/10/28(日) 23:00:08
>>653
653の理論だと、C++のSTLもひどいし、BSDやらLinuxの
カーネルのソースコードもひどいことになるぞ。
655デフォルトの名無しさん:2007/10/28(日) 23:13:03
右定数が良くないと言ってるやつは右に定数を書くと
下記のようにミスってもコンパイルが通って発覚が遅れるのを防止するためだろ。
if ( a = NULL )

左定数派ならば、ミスって下記のように書いてもコンパイル通らないからな。
if ( NULL = a )


まぁそんなのミスしなければいいだけで
俺は普通に右に定数を書くけどな
656デフォルトの名無しさん:2007/10/28(日) 23:14:45
なにこの痴呆症患者の集うスレ・・・
657デフォルトの名無しさん:2007/10/28(日) 23:15:15
もうコピペにしか見えないぞそれw
658デフォルトの名無しさん:2007/10/28(日) 23:16:13
慣れていくにしたがって、変な書き方だと思っていたものが馴染んでくることもある

こんなのとか
array[index++]=value; // 今はこの書き方で無いとバグをだしそうで怖い
while((chr=getchar())!=EOF){ ... } // 自然にこうしてしまう
659デフォルトの名無しさん:2007/10/28(日) 23:29:07
>>654
実際ひどいだろ
660デフォルトの名無しさん:2007/10/28(日) 23:32:34
>>659
せまい自分の中の範囲だけで判断せずに、もうちょっと
勉強をしていったほうがいいんじゃない。
661デフォルトの名無しさん:2007/10/28(日) 23:35:46
>>660
お前には>>638に対するスレ住人の熱烈な愛が見えないのか
662デフォルトの名無しさん:2007/10/29(月) 00:39:49
638はスレを加速させるための燃料だろ?
まさか本気で言っている訳がないじゃないか。
663デフォルトの名無しさん:2007/10/29(月) 00:41:56
だが逆に失速したようだ
664デフォルトの名無しさん:2007/10/29(月) 00:47:20
強烈なかまってちゃんが居たみたいだな。
どんだけ愛に飢えてんだよ
665デフォルトの名無しさん:2007/10/29(月) 00:47:47
それは結果論ってことで。
やっぱり>>80みたいな神が現れないとダメだな。
666デフォルトの名無しさん:2007/10/29(月) 01:28:47
正直、右左ごときどっちでもいいだろ……
コードの一行にこだわる瑣末な事でプログラム書けるのか?
667デフォルトの名無しさん:2007/10/29(月) 01:37:21
適当に考えもなしにコードを書いている人には分からない次元の話だよな。
668デフォルトの名無しさん:2007/10/29(月) 02:07:10
>667みたいな奴が権力握ると、どうでもいいルールを押し付けて生産性落とす。
要するにコボラーと同レベル。
669デフォルトの名無しさん:2007/10/29(月) 02:27:49
必要なルールと余計なルールの区別がつかないって悲しいことだな。
ま、チーム開発をしたことが無いなら、気が付かなくても仕方ないか。
670デフォルトの名無しさん:2007/10/29(月) 02:47:14
C++のSTLがひどいはずは無い。
BSDやらLinuxのカーネルのソースコードがひどいはずは無い。
社会保険庁の年金記録管理がひどいはずは無い。
TBSの番組がひどいはずは無い。
全国に30万人も会員がいるNOVAの経営がひどいはずが無い!
671デフォルトの名無しさん:2007/10/29(月) 02:48:49
basic_stringは酷いと思う
672デフォルトの名無しさん:2007/10/29(月) 03:14:24
>>370
まぁ、お前が書くコードよりはヒドクハナイダロ。
673デフォルトの名無しさん:2007/10/29(月) 03:24:53
これまでの軌跡

左辺に定数を置くのが嫌なのは、Cの変数宣言方法がおかしいからだろう
FORTRANでの変数宣言方法もCと同じものだ
以降その話題には触れず

strcmpをnot演算子で等しいと言うif文を書く奴に言われたくない
strcmpが返す値は整数だから論理値として扱うのはおかしいだろう!
いいえ、strcmpが返す値は整数ではなく符号です
数に意味はないので、論理値として扱っても問題はありません
以降その話題には触れず

そもそも自分の勉強不足を棚に上げ、ありもしない左辺定数の利点をさも至上のコーディングの様に持ち上げる
その様なおもちゃみたいな奴が居るのだから、いじり回したくもなるのが人情
674デフォルトの名無しさん:2007/10/29(月) 06:43:58
目視だとしても
変数 = NULL のバグを見つけるのと
NULL == 変数のスタイルを守っているかをチェックする労力って少なくとも同等だと思われ
675デフォルトの名無しさん:2007/10/29(月) 08:51:28
>>464
>ちょっと待て、strcmpは"0"か"正"か"負"を返すのであり、"数"を返すわけでは無い
>strcmpの返す値を、"0"より"大きい"のか"小さい"のか"等しい"のかで比べる以外に使用するのはナンセンスだろ

いいえ、しっかりと「数を返す」と定義してあります。

>Cにはboolenは無く、bool値の定義は、「0以外は真である」となっている

C言語は機能面で整数でbooleanを代用しているだけであって、
意味の上での整数とbooleanの区別はあります。
実際、isdigit の戻り値は、「真偽」と定義してあり、
一方で、strcmp の戻り値は、「数」と定義してあります。

>>466
無限ループの時は、while(1)ではなく、for( ; ; ) とした方が綺麗。
676デフォルトの名無しさん:2007/10/29(月) 08:53:14
わかったからさっさとハロワに池
677デフォルトの名無しさん:2007/10/29(月) 09:04:48
>左辺に定数を置くのが嫌なのは、Cの変数宣言方法がおかしいからだろう
>FORTRANでの変数宣言方法もCと同じものだ
>以降その話題には触れず

逆です。Cの変数宣言方法がおかしいから、
C言語では定数を左に書いても変ではない、という余地を残してしまったわけです。
もし、C言語が、i int;、main() int; という宣言のしかたをするのなら、
条件式の定数を左に書く人は居なかったでしょう。
------------------------------------
i int; /* i は int */
p == NULL /* p が NULL */
------------------------------------
int i; /* int な i */
NULL == p /* NULL な p */
------------------------------------
678デフォルトの名無しさん:2007/10/29(月) 09:07:46
>>673
>strcmpが返す値は整数ではなく符号です

数を返すと定義してあります。

int strcmp(const char *cs, const char *ct) は、
文字列 cs と 文字列 ct を比較する. cs > ct なら 0より大きい数,
cs < ct なら 0未満の数, 等しければ 0 を返す.
679デフォルトの名無しさん:2007/10/29(月) 09:09:29
673は、スレの流れも分かって無いのに、適当なこと言って煽らないようにね。
680デフォルトの名無しさん:2007/10/29(月) 09:10:13
>strcmpが返す値は整数ではなく符号です
>strcmpが返す値は整数ではなく符号です
>strcmpが返す値は整数ではなく符号です

やっぱりこのレベルの人が頑張っていたんだね
681デフォルトの名無しさん:2007/10/29(月) 09:13:35
大体、符号を返すったって、符号だけどうやって返すんだよって。
682デフォルトの名無しさん:2007/10/29(月) 09:14:01
>>674
> 目視だとしても
> 変数 = NULL のバグを見つけるのと
> NULL == 変数のスタイルを守っているかをチェックする労力って少なくとも同等だと思われ

後者はわざわざあとから書き直さないでしょ。
あと「変数 == NULL」と信じてる目で「変数 = NULL」を見ると見過ごす確率大。
683デフォルトの名無しさん:2007/10/29(月) 09:26:16
>strcmpが返す値は整数ではなく符号です

もしそうなら、なおさら !strcmp(str1, str2) とはかけないね。
だって、! は符号を調べる演算子じゃないからね。
684デフォルトの名無しさん:2007/10/29(月) 09:30:46
随分と必死だな、これw
685デフォルトの名無しさん:2007/10/29(月) 09:33:17
それから、
while(1) と書いたときの「1」は、整数でbooleanを代用している。

一方、strcmp の戻り値は、意味の上でも整数で、
整数でbooleanを代用している、というわけではない。
686デフォルトの名無しさん:2007/10/29(月) 10:15:38
>>682
あのさー、だからそれはコンパイラが教えてくれるんだって・・・
687デフォルトの名無しさん:2007/10/29(月) 10:59:58
>>686
コンパイラも完璧じゃないじゃん
Cのシンタックス的に何も問題ないんだから
688デフォルトの名無しさん:2007/10/29(月) 11:01:01
昼夜曜日を問わず熱い論戦が続いております
689デフォルトの名無しさん:2007/10/29(月) 11:22:10
お前らめぐまれてるなー
俺なんかマイナーCPUで屑コンパイラしかなくて、警告がしょぼい上に方言バリバリな環境に
何年も泣かされてきたんだぞ つД`)
690デフォルトの名無しさん:2007/10/29(月) 11:50:02
なんという低レベルな言い争いなんだ…
691デフォルトの名無しさん:2007/10/29(月) 12:05:43
新レスチェックして百以上レスついてるの見る度に噴く
692デフォルトの名無しさん:2007/10/29(月) 12:27:22
>>686
そりゃ処理系依存だ
ダメだな
693デフォルトの名無しさん:2007/10/29(月) 12:28:04
ヒマだなぁ
694デフォルトの名無しさん:2007/10/29(月) 12:34:56
!strcmp(str1, str2)
と書く奴は、もし、その書き方で整合性を取りたいなら、

int32_t ret = (int32_t)strcmp(str1, str2);
if( !ret ){} /* str1 == str2 */
if( ret && !(ret&-0x80000000) ){} /* str1 > str2 */
if( ret&-0x80000000 ){} /* str1 < str2 */
if( ret ){} /* str1 != str2 */
if( !(ret&-0x80000000) ){} /* str1 >= str2 */
if( !ret || ret&-0x80000000 ){} /* str1 <= str2 */

と書かなきゃしょうがないよな。
やってらんねー。
695デフォルトの名無しさん:2007/10/29(月) 12:35:19
ヒマだなぁ
696デフォルトの名無しさん:2007/10/29(月) 12:47:11
ヒマならハローワークにでも行けよ
697デフォルトの名無しさん:2007/10/29(月) 13:14:27
>>687=688
こいつ、ニート
698デフォルトの名無しさん:2007/10/29(月) 13:35:31
10 print "ヴァカ"
20 goto 10
30 end
699デフォルトの名無しさん:2007/10/29(月) 14:19:10
strcmpが本当に"整数"を返すのであれば
c = c + strcmp(str1, str2);
がどの様な動作をするのか答えられると思うのだがどうだろうか?
700デフォルトの名無しさん:2007/10/29(月) 14:22:10
>>699
それに答えるのは簡単だ。
Cに、strcmp()の結果が足されるとだけ言えばいい。
或いは、str1がstr2より大きければCの値は元の値より増え、str1がstr2より小さければ減り、そうでなければ変わらないと言ってもいい。
701デフォルトの名無しさん:2007/10/29(月) 14:28:17
>>699
c += strcmp(str1, str2);

と書くのが望ましい。
702デフォルトの名無しさん:2007/10/29(月) 14:30:31
>>700
答えになっていない
その様な曖昧な答えでは、どの様な動作をしているのか判らない
cの値は、元の値からどれだけ増えるのか?
cの値は、元の値からどれだけ減るのか?
あなたの言う動作ではっきり判っている動作は、str1とstr2が等しければcが変わらないと言うことだけだ

strcmpが返す値は"整数"だと主張するのであるから、増えるときは何れだけ増え、減るときは何れだけ減るとハッキリと言えるはずだが
703デフォルトの名無しさん:2007/10/29(月) 14:31:07
>>701
確かにそうだな...
704デフォルトの名無しさん:2007/10/29(月) 14:37:30
>>702
「整数なら言える筈」と言う根拠を提示してください。
705デフォルトの名無しさん:2007/10/29(月) 14:44:30
>>704
返すのは符号だと述べられているのに、"整数"が戻り値であると主張するのだから、
その戻り値の数字に意味があると主張しているのだろ?
なら、そのハッキリとした根拠の上に、cの値が具体的に何れだけ変化するのか述べることが出来て当然だと思うが
706700=704:2007/10/29(月) 14:59:49
>>705
いいえ、私は整数が戻り値であると言う主張を過去未来に渡って一切行なっていませんし行なう積もりもありません。
# 勿論、符号であると言う主張に着いても同様です。

尚、整数であるからには数字に意味がある(べきだ)という短絡についても許容できないと考えます。
従って、>699に対する回答とstrcmp()の戻り値が整数かどうかについてはその点での議論は無意味だと思います。
707デフォルトの名無しさん:2007/10/29(月) 15:10:23
そもそも
c += strcmp(str1, str2);
この関数はこんな使い方を意図していない
708デフォルトの名無しさん:2007/10/29(月) 15:26:47
>>706
>>675???
数と言ったから、整数ではない?
符号を返すと言ったわけでもない?
0より大きな数?0より小さな数?それは、符号と言うのだと思うが?

strcmp(str1, str2)は、等しければ"0"を、str1がstr2よりも大きければ正の数値を、str1がstr2よりも小さければ負の数値を返す関数だ
で、その返ってきた数値に、どんな意味があるのか?
数値には意味はなく、正か負か"0"と言う符号の状態に意味があるんじないのか?

仮にあなたが、整数を返すと言う主張をしていないなら、>>699に対し回答すべきではない
そして、>>702で突っ込まれたからと言って、>>706の様な回答をすべきではない(あなたの頭が悪いようにしか見えない)
709700=704:2007/10/29(月) 15:33:37
>>708
いいえ、私は>675でもありません。
私の主張したい点は、>699のような設問が無意味だと言うことだけです。
710デフォルトの名無しさん:2007/10/29(月) 15:36:29
うぜー。

man strcmp
>返り値
>strcmp() 関数と strncmp() 関数は整数を返す。この整数は、ゼロよりも、
>1)小さい、2)等しい、3)大きいのいずれかである。それぞれは、s1(または、
>この文字列の最初の n バイト)が s2 よりも、1)小さい、2)等しい、3)大きい
>に対応している。
711デフォルトの名無しさん:2007/10/29(月) 15:41:32
>>708
そもそも符号に0を表わす状態は存在しないわけだが。
712デフォルトの名無しさん:2007/10/29(月) 15:41:34
>>705
符号だけどうやって返すの?
頭おかしいの?
Cに符号型なんて無いよ。
713みんな暇だなw:2007/10/29(月) 15:43:22
0を除いて絶対値に意味はないだろ
714デフォルトの名無しさん:2007/10/29(月) 15:43:43
日本人じゃないんじゃないの
715デフォルトの名無しさん:2007/10/29(月) 15:44:09
>strcmp(str1, str2)は、等しければ"0"を、str1がstr2よりも大きければ正の数値を、
>str1がstr2よりも小さければ負の数値を返す関数だ

ちがいます。
int strcmp(const char *cs, const char *ct) は、
文字列 cs と 文字列 ct を比較する. cs > ct なら 0より大きい数,
cs < ct なら 0未満の数, 等しければ 0 を返す.
と定義されています。
「正の数値」や「負の数値」という言葉は使われていませんし、
「等しい時は偽を返す」とも書かれていません。
716デフォルトの名無しさん:2007/10/29(月) 15:44:11
>>712
だから、整数で返すんだろ
数には意味はなく、正か負か0かに意味があるんだろ

717デフォルトの名無しさん:2007/10/29(月) 15:45:39
ゼロよりも大きい整数のことを、普通、正の数値と言うんだが
718デフォルトの名無しさん:2007/10/29(月) 15:46:15
爆釣ですな
719デフォルトの名無しさん:2007/10/29(月) 15:48:01
>>715
C言語に於いて、「0以外は真」つまり、「0は偽」だろ?

720デフォルトの名無しさん:2007/10/29(月) 15:48:02
Cにおいて、符号を調べる場合は、
「>0, <0, >=0, <=0, ==0, !=0」を使うのですが。
「!」を使っても符号を調べることは出来ません。

それから、定義に「数」を返すと書いてある以上、strcmpの戻り値は数です。
文字列を比較した結果を整数値で返す、というだけです。

出かけるので、次返事できるのは夜中の2時です。じゃ。
721デフォルトの名無しさん:2007/10/29(月) 15:48:11
if (0 == a)の奴もそうだけど、strcmpの奴も同じプロジェクトにいたらと思うとぞっとする。
722みんな暇だなw:2007/10/29(月) 15:54:02
個人的には0==だけど等値判定だけなら!でもかまわんだろ
723デフォルトの名無しさん:2007/10/29(月) 16:17:48
>>722
別にどのように書こうが、それは全くあなたの自由。
うざいのは、このスレに粘着してる奴。
724デフォルトの名無しさん:2007/10/29(月) 16:27:47
if (strcmp() == 0)と、if (!strcmp())が同値であることを、万人が迷うことなく即答できるならよいが、
そうでは無い人がいることを考えると、前者の方が良いと考える。

if (0 == a)の場合と違って、!strcmp()には、タイプ数を減らすこと以外のメリットが見当たらない。
725デフォルトの名無しさん:2007/10/29(月) 16:40:06
if (strcmp() == 0)が即座に理解できて、if (!strcmp())の理解に少し迷うレベル
且つC/C++の開発を問題なく行えるレベルの人間って、多分ほとんどいない
726デフォルトの名無しさん:2007/10/29(月) 16:42:46
いるだろ
727デフォルトの名無しさん:2007/10/29(月) 16:43:54
別にif (!strcmp())って書いてもいいけどさ、それが唯一至高の書き方だとか言われるとうざい
728デフォルトの名無しさん:2007/10/29(月) 16:45:30
strcmpはゼロと比較して使う。
であるから、右辺にしろ左辺にしろ、
等号不等号の向こう側にはゼロを置いておきたい。

という理由で !strcmpとするよりは、
おなじみの方法でゼロと比較したい。
729デフォルトの名無しさん:2007/10/29(月) 16:46:29
ぱっと見て「ヘタだなぁ」と思う議論をしているスレはここですか?
730デフォルトの名無しさん:2007/10/29(月) 16:46:41
>>725
他言語でも、if (!strcmp())と同等の書き方をするのか?
どんな言語でも、if (strcmp() == 0)と同等の書き方をすれば、誰もが迷わない。
731デフォルトの名無しさん:2007/10/29(月) 16:48:35
>>730
そもそも他の言語で文字列を比べるのに関数を使うなんて有り得ない
732デフォルトの名無しさん:2007/10/29(月) 16:49:39
>>730
他の言語では、文字列の同等性を返す関数ないし演算子があるから、
順序を調べて0と比較するようなことはしない。
733デフォルトの名無しさん:2007/10/29(月) 16:51:13
だめだこりゃ
734デフォルトの名無しさん:2007/10/29(月) 16:52:12
ニートが、ただ単にC FAQに載ってることを蒸し返して暇つぶししてるだけだから、
相手にしても意味無いよ。
735デフォルトの名無しさん:2007/10/29(月) 16:55:13
>>699
ISO/IEC 9899 7.21.4.4
736デフォルトの名無しさん:2007/10/29(月) 16:56:11
- !strcmp
約278,000件中1 - 10件目(0.21 秒 )
http://www.google.com/codesearch?q=%21strcmp&hl=ja

- strcmp(・・・) == 0
約281,000件中1 - 10件目(0.23 秒)
http://www.google.com/codesearch?hl=ja&lr=&q=strcmp%5Cs*%5C%28%5B%5E%5C%29%5D%2B%5C%29%5Cs*%3D%3D%5Cs*0

- 0 == strcmp
約15,600件中1 - 10件目(0.17 秒)
http://www.google.com/codesearch?hl=ja&lr=&q=0%5Cs*%3D%3D%5Cs*strcmp
737デフォルトの名無しさん:2007/10/29(月) 16:57:53
おもったより !strcmp 多いなw
738デフォルトの名無しさん:2007/10/29(月) 17:03:02
定数を左辺に置くより、そもそも定数と比べないようにする方が意味があると考える人が多いんだろうね
739デフォルトの名無しさん:2007/10/29(月) 17:06:05
単に短く書けるからだろ。ばかじゃね?
740デフォルトの名無しさん:2007/10/29(月) 17:08:40
ヒマだなぁ
741デフォルトの名無しさん:2007/10/29(月) 17:19:06
ifやwhileの条件部分に論理演算の結果を渡さなきゃ気がすまない奴はヘタクソ。
そういう手合いに限って
#define BEGIN {
#defien END }
みたいな事をやりたがるんだよな。
結局他の言語がベースにあるからCで物を考えるということが出来ないだけなんだよ。
郷に入っては郷に従えと。
742デフォルトの名無しさん:2007/10/29(月) 17:40:54
新たなアホ登場か?
743デフォルトの名無しさん:2007/10/29(月) 17:45:19
さぁ?
そう思うなら具体的に指摘を
744デフォルトの名無しさん:2007/10/29(月) 17:49:07
strcmp(a, b) && strcpy(a, b) || strcpy(b, "");
くらい書けないと一人前とはいえないな。
745デフォルトの名無しさん:2007/10/29(月) 17:59:24
ここ一年以内にCを始めて、C FAQとか藤原のページとかを見つけて、誰かと話したくて
たまらん奴と見た。
しかもニート。
746デフォルトの名無しさん:2007/10/29(月) 18:02:25
>>743
かまって欲しくてたまらん汁垂れ流しw
747デフォルトの名無しさん:2007/10/29(月) 18:08:22
if (!strcmp(s1, s2) {}
Q1: {}に入るのはどのような時ですか?
Q2: 何故そうなるのか説明しなさい。
という問題を出せば、Cの理解度を測る材料にはなるな。
748デフォルトの名無しさん:2007/10/29(月) 18:10:01
ネタがないのに煽る奴
興を殺ぐからROMってろよ
749デフォルトの名無しさん:2007/10/29(月) 18:10:23
>>747
A1.入ることは無い
A2.括弧が1つ足りないから

とか言うと怒るよね?
750デフォルトの名無しさん:2007/10/29(月) 18:11:35
>>747 ある程度も何も…。
strcmpの動作を知っているか否か、
という部分が強調されるだけで、
それでCの理解度を計るには心もとない肝。

理解度つったらやっぱポインタ、配列、
ポインタ演算、メモリ関係の関数とかじゃね?
751デフォルトの名無しさん:2007/10/29(月) 18:12:12
>>749 冷静w
752747:2007/10/29(月) 18:14:46
思った通り爆釣。
どんだけリロードしてんだよw
753デフォルトの名無しさん:2007/10/29(月) 18:16:30
>>750
> >>747 ある程度も何も…。
> strcmpの動作を知っているか否か、
> という部分が強調されるだけで、
> それでCの理解度を計るには心もとない肝。

rakudai
754デフォルトの名無しさん:2007/10/29(月) 18:17:08
うわぁ・・・
755デフォルトの名無しさん:2007/10/29(月) 18:19:30
                 ┌─┐
                 |も.|
                 |う |
                 │来│
                 │ね│
                 │え .|
                 │よ .|
      バカ    ゴルァ  │ !!.│
                 └─┤    プンプン
    ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎
756747:2007/10/29(月) 18:20:41
>>752
お前誰だよ・・・

if (!strcmp(s1, s2)) {}のtypoだった。
Cの理解度を測るテストの問題くらいにはなるな、という意味。
757デフォルトの名無しさん:2007/10/29(月) 18:23:57
このスレは、隔離スレに認定されました。
758デフォルトの名無しさん:2007/10/29(月) 18:33:09
>>700
strcmpが幾つを返すか決まっていない以上、
足してオーバーフローなんかしたら鼻から悪魔だぞ

あと、strcmpが整数を返して、
その整数に対して!を使ってはいけないと主張する根拠を聞きたいな
759デフォルトの名無しさん:2007/10/29(月) 18:38:28
>あと、strcmpが整数を返して、
>その整数に対して!を使ってはいけないと主張する根拠を聞きたいな

!0, !5が何を返すかよくわからない派遣グラマの脳の負担を低減させることが出来るのは
大きなアドバンテージだ。
760デフォルトの名無しさん:2007/10/29(月) 18:57:26
>>755
ひさしぶりに見たな、これ
761デフォルトの名無しさん:2007/10/29(月) 19:01:48
慣用句を許容できないようではCを使うべきではないな
762デフォルトの名無しさん:2007/10/29(月) 19:42:30
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ     >>80
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
763デフォルトの名無しさん:2007/10/29(月) 19:42:33
C言語的には!x と x==0 は等価であるといえども、
"not"に変換して読んだとき、素直に意味が通ってほしいものだ。

!strcmp(x,y)で、意図としてはx==yとか言われると、アレ?ってなっちゃうから。
764デフォルトの名無しさん:2007/10/29(月) 19:44:19
if (x == y) printf("糞");
if (! (x-y)) printf("尿");
765デフォルトの名無しさん:2007/10/29(月) 20:16:48
>>746
>>743>>741じゃないよ
766デフォルトの名無しさん:2007/10/29(月) 20:39:02
Cにはbool型が無いから整数で代用しているって主張しているくせに、
符号型が無いから整数で代用しているって言う主張は認めないのね。
ダブルスタンダードですな。
767デフォルトの名無しさん:2007/10/29(月) 20:41:59
うん
768デフォルトの名無しさん:2007/10/29(月) 20:49:04
769デフォルトの名無しさん:2007/10/29(月) 21:08:34
まん
770デフォルトの名無しさん:2007/10/29(月) 21:11:45
ざい
771デフォルトの名無しさん:2007/10/29(月) 21:22:03
KENT-WEBのスクリプト、今見るとひでぇなwwww
ほとんど成長しないよな中の人。
772デフォルトの名無しさん:2007/10/29(月) 21:26:59
なんでif(a)じゃいかんのかね?Cはようわからんよな
773デフォルトの名無しさん:2007/10/29(月) 21:29:19
モジュールも使えないようなプロパイダのクソCGIサーバでも動くように
コーディングしてあるんだよ。そういうのはヘタとは言わない。
774デフォルトの名無しさん:2007/10/29(月) 21:30:51
性文法主義者は総じてアホ
なぜそのようなコードが書かれているのか分析することさえできない
775デフォルトの名無しさん:2007/10/29(月) 21:31:22
>>773
あ、頭でも打ったのか?
776デフォルトの名無しさん:2007/10/29(月) 21:47:54
>>747 >>750
qsort 用の比較関数作らせれば一発でわかる
777デフォルトの名無しさん:2007/10/29(月) 21:49:42
まだやってたのかw
778デフォルトの名無しさん:2007/10/29(月) 21:50:21
strcmp でここまで遊べるおまえらは死んだほうがいい
779デフォルトの名無しさん:2007/10/29(月) 21:52:21
>>777-778
やぁお帰りなさい
780デフォルトの名無しさん:2007/10/29(月) 21:52:35
KENT-WEBって、なんのことかと思ったら。フリーでソースコードまで
公開してくれるCGIのサンプル集じゃない。ちらと中のぞいてみたが、
委託して納入されたものだとしても、別に不満はないな。

あえて言うなら、細かい好みのレベルかもしれんが:

-設定変数は、ファイルを別に分けて欲しい
-設定変数は、それとわかるように大文字にするなりしてほしい
-Perlでありがちなのだが、main処理がダラダラと長くて疲れる

くらいか?
781デフォルトの名無しさん:2007/10/29(月) 21:54:54
>>724
>if (0 == a)の場合と違って、!strcmp()には、タイプ数を減らすこと以外のメリットが見当たらない。

if(strcmp(s1, s2)<0){ // ・・・条件(1)
hoge;
}else if(strcmp(s1, s2)>0){ // ・・・条件(2)
fuga;
}else{ // [!strcmp(s1, s2) == 0] ・・・条件(3)
hage;
}

と書いていたひとが、たまたま条件(1)と(2)で同じ処理をしたいと思って

if(strcmp(s1, s2)){
hogefuga;
}else{
hage;
}

と書き換えるとする
その後、hogehage と hage で逆の処理をしたいと思ったら

if(!strcmp(s1, s2)){
hogefuga;
}else{
hage;
}

こう書くだろ?
782デフォルトの名無しさん:2007/10/29(月) 22:00:12
すみません
初心者なのですが

int a = strcmp(str1, str2);
int b = strcmp(str1, str3);

で a > b の場合は

str1 は str2 より str3 に近いということでしょうか?
783デフォルトの名無しさん:2007/10/29(月) 22:00:56
if (strcmp(str1, str2) > 0) {
 hage
} else if (strcmp(str1, str2) < 0) {
 hoge
} else {
 huga
}
784デフォルトの名無しさん:2007/10/29(月) 22:01:34
>>781
ものすごく限定されたシチュエーションだなw
785デフォルトの名無しさん:2007/10/29(月) 22:03:47
>>782
そうです
でなきゃソートできません
786デフォルトの名無しさん:2007/10/29(月) 22:04:38
>>785
a = 3
b = -5
のときもあるぞ
787デフォルトの名無しさん:2007/10/29(月) 22:04:49
>>782
なぜそういう風に思ったのか、ちゃんと書いてごらん。
自分の考えをキチンと整理すれば、正しいか間違っているか
おのずと答えが出るもんだよ。
788デフォルトの名無しさん:2007/10/29(月) 22:04:54
>>782
strcmpの返値にそういう意味はありません
789デフォルトの名無しさん:2007/10/29(月) 22:05:41
>>782=80
790デフォルトの名無しさん:2007/10/29(月) 22:05:56
>>781
>}else{ // [!strcmp(s1, s2) == 0] ・・・条件(3)

ちょっw おまwww
791デフォルトの名無しさん:2007/10/29(月) 22:06:05
>>785はどう見ても釣り
792デフォルトの名無しさん:2007/10/29(月) 22:07:47
>>791
qsort に strcmp 渡すとまずい?
793デフォルトの名無しさん:2007/10/29(月) 22:09:14
Cでもオールマンスタイルの俺はコメントでこう書くこともある
}
else //if(!strcmp(s1, s2) == 0)
{
794デフォルトの名無しさん:2007/10/29(月) 22:10:11
>>791

>>781 はどう見ても釣り
795デフォルトの名無しさん:2007/10/29(月) 22:11:02
アンカ間違えた

>>790

>>781 はどう見ても釣り
796デフォルトの名無しさん:2007/10/29(月) 22:12:19
>792
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa13.html

Q 【qsort】
 str_arrayは文字列へのポインタが100個格納された配列である。
次のコードはなぜうまく動作しないのか。
char *str[];

qsort(str_array, 100, sizeof(char *), strcmp);


qsortは、指定する比較関数に対して、比較されるオブジェクト
を指すポインタを使った呼び出しを行います。言い換えると、呼び出された比較
関数は、与えられた引数aとbに対して、
*aと*bを比較する仕様になっている必要があります。

 strcmpはこの仕様を満たしていないので、そのまま
qsortの引数として用いることができません。
次のような関数を定義して、その中から
strcmpを呼び出せば解決します。

int pstrcmp(const void *p1, const void *p2)
{
return strcmp(*(char *const *) p1, *(char *const *) p2);
}

...
qsort(str_array, 100, sizeof(char *), pstrcmp);
...

(参考: comp.lang.c FAQ 13.8)
797デフォルトの名無しさん:2007/10/29(月) 22:14:09
ところでおまえらなんで strncmp 使わないの?
798デフォルトの名無しさん:2007/10/29(月) 22:15:42
> }else{ // [!strcmp(s1, s2) == 0] ・・・条件(3)

これはヒドイ。まだ本人は気づいてないのかw

こうだろ。
}else{ // [!strcmp(s1, s2)] ・・・条件(3)
あるいは、こうかな。
}else{ // [strcmp(s1, s2) == 0] ・・・条件(3)
799デフォルトの名無しさん:2007/10/29(月) 22:16:20
http://www.c-production.com/contents/c/sec13.html

if( (fp=fopen(fname,"r"))==NULL){
if(a[i]=='\0'){max_a = i; break;}
if (chk==1){

if(0==strncmp(&a[i],&b[j],1)){

なんで最後だけ?ww
800デフォルトの名無しさん:2007/10/29(月) 22:18:47
>>797
使う機会があれば使うよ
801デフォルトの名無しさん:2007/10/29(月) 22:21:00
>>798

論理的に正しくて且つ分かりやすくて誤解を招かない書き方は

if(!strcmp(str1, str2) != 0){

でFA?
802デフォルトの名無しさん:2007/10/29(月) 22:22:40
>>781
if(strcmp(s1, s2)==0){



if(strcmp(s1, s2)!=0){

に書き換えるのと大して変わらんと思うが
803デフォルトの名無しさん:2007/10/29(月) 22:23:46
今時strcpy, strcmp等の関数をそのまま使う奴はヘタクソ。
strcpy_sやstrlcpyなどのセキュアな関数使えよ。
804デフォルトの名無しさん:2007/10/29(月) 22:25:03
>>801
いや、こっちだろ

if(!strcmp(str1, str2) == !0){
805デフォルトの名無しさん:2007/10/29(月) 22:25:56
分かるけど分かりやすいかは疑問
806デフォルトの名無しさん:2007/10/29(月) 22:34:08
>>803
strcmp のセキュアな関数も教えてください。
807デフォルトの名無しさん:2007/10/29(月) 22:43:17
>>473 >>476
定義されている

strcmp(s1, s2) == -strcmp(s2, s1)

これは常に真

808デフォルトの名無しさん:2007/10/29(月) 22:44:33
manpageすら読まない奴がいることに驚愕
809デフォルトの名無しさん:2007/10/29(月) 22:47:31
>>803
どんな環境だかわからないのに、そんなこと言えるのか?
810782:2007/10/29(月) 22:49:49
ご回答頂いたみなさんありがとうございます
でも結論がいっぱいあるみたいでよくわかりません ><
811デフォルトの名無しさん:2007/10/29(月) 22:52:09
>>807
s1 と s2 で文字列長が違う場合は?
812デフォルトの名無しさん:2007/10/29(月) 23:04:10
>>811

>>807 はどうみても釣り
813デフォルトの名無しさん:2007/10/29(月) 23:04:23
>>807
規格票のどこにある?
814デフォルトの名無しさん:2007/10/29(月) 23:05:21
strcmp は符号しか返さないよ
815デフォルトの名無しさん:2007/10/29(月) 23:05:39
気違いの振りを装い続けるつもりになっている奴は既に気違い
816デフォルトの名無しさん:2007/10/29(月) 23:07:01
>>810
あれれ・・・まだ分かってなかったのか。
じゃぁ、高卒のオレがレクチャーしちゃる。

int a = strcmp(str1, str2);
int b = strcmp(str1, str3);

は、文字コードの引き算を返しているだけなので、
数学的に言うと下記の式で表せる。
a = S1 - S2
b = S1 - S3

で a > b は、下式に置き換える事ができる。
S1 - S2 > S1 - S3

ここで仮に、S1 = 65、S2 = 66、S3 = 67 だとする(単なる例だよ)
65 - 66 > 65 - 67
が成り立つ。

「str1 は str2 より str3 に近いということでしょうか?」 ・・・に当てはめてみる。
「65 は 66 より 67 に近いということでしょうか?」

違うよな?
817デフォルトの名無しさん:2007/10/29(月) 23:07:40
そもそもstr系なんて自分用のツールくらいにしか使わなくね?
NULしゅうたんされていない可能性が常に付きまとうし。
せめてmemけいじゃね。
818デフォルトの名無しさん:2007/10/29(月) 23:08:34
>>810
aとbの大小関係を求めても意味は無い
aやbは単独で意味をなす
819デフォルトの名無しさん:2007/10/29(月) 23:25:07
>>817
釣れますか?
820817:2007/10/29(月) 23:31:15
>>819
どうだろ?
821デフォルトの名無しさん:2007/10/29(月) 23:37:57
>>816
すみません
|a| > |b|
のつもりで書きました
それでもだめですか? ><
822デフォルトの名無しさん:2007/10/29(月) 23:38:40
ぱっと見て下手だなぁと思う人生のすり減らし方
823デフォルトの名無しさん:2007/10/29(月) 23:45:28
ファイルが開かれていれば0以外の値を返すisOpen()という関数があったとする。
(0以外の値はファイルポインタかもタイムスタンプかも1かもはさておきとして)

ファイルが開かれているかの判定は下を使うのがやはり正しいと思われる。
if(isOpen() != 0)
if(isOpen())

つまりstrcmpの関数名または戻り値の仕様がヘタってことでいいのではないか。

で、これをマクロで隠蔽するかしないかはまた別の話ということで。
824デフォルトの名無しさん:2007/10/29(月) 23:51:19
>>821
任意の入力文字列strがあったとしよう
int x=strcmp("",str);
このxを人に送りつける
そしてxをもらった人は
二分探索の要領でstrcmp("",str)がxになるstrを探す

この手法を使えば六法全書だってint長のデータに圧縮できる

…わけないだろ
825デフォルトの名無しさん:2007/10/29(月) 23:55:33
話変わって、
ある関数を作っていて渡す必要のあるパラメータが多い場合、
1.そのままだらだら引数を増やすか
2.それとも構造体作ってポインタで渡すか
どういう判断基準で使い分けてる?
826デフォルトの名無しさん:2007/10/29(月) 23:56:57
今更>>1を読み直したのだが
局所ブロックに関しての議論を
どっかにまとめてたりしてないものか?
827デフォルトの名無しさん:2007/10/30(火) 00:08:32
>>782
辞書を考えてみる。
str1="aa"
str2="az"
str3="c"
の場合、
int a = strcmp(str1, str2); は2文字目の比較でaとzの差を返す。
int b = strcmp(str1, str3); は1文字目の比較でaとcの差を返す。
・・・と思う。

というか、より近いって基準が判らん。
"aa"と"az"の間の単語数と、"az"と"c"の間の単語数を較べるのだろうか?

異なる文字列には必ず大小関係があって、その大小関係を入れ子にして
どんどん細かくすることで順番が決まってソートされるので>>785は大嘘。
828デフォルトの名無しさん:2007/10/30(火) 00:12:19
>>825
明確な基準は持ってないけど
たとえば構造体のサイズがポインタのサイズを超えたら検討し始めるかな
829デフォルトの名無しさん:2007/10/30(火) 00:13:53
>>825
関数宣言が3行目に突入したら100%構造体に以降
830デフォルトの名無しさん:2007/10/30(火) 00:14:57
>>825
Haahを渡す
831デフォルトの名無しさん:2007/10/30(火) 00:15:01
>>825
渡すパラメータで処理が分岐するなら、関数を増やすと思う。
832デフォルトの名無しさん:2007/10/30(火) 00:17:02
データ構造が先にありきで考えるだろ
833デフォルトの名無しさん:2007/10/30(火) 00:17:35
>>825
渡すのだけが目的だよね?
関数から出力を受け取るといったポインタの方でしかできない事は考えないんだよね?
834デフォルトの名無しさん:2007/10/30(火) 00:18:52
.>>825
引数の組に簡単な名前で呼べないか検討して、
それが出来る場合は1つの概念で表せる→カプセル化出来ると判断して
構造体(orクラス)にしてしまう。
簡単な名前が思いつかない場合、それぞれの引数は
互いに関連性が低いのだから、無理してまとめたりはしない。
835デフォルトの名無しさん:2007/10/30(火) 00:19:23
>>825
vsprintfみたいに可変長引数にする

836デフォルトの名無しさん:2007/10/30(火) 00:20:05
他の関数でも同じ面子がいるかどうかが自分の基準
837デフォルトの名無しさん:2007/10/30(火) 00:21:31
>>836
それだ
838825:2007/10/30(火) 00:25:30
>>825
誤解があるといけないので具体例で書くと
N個のint引数を渡す必要のある関数funcを作る場合

1.
void func(int arg1, int arg2, int arg3, ...... int argN);

2.
typedef struct {
 int arg1;
 int arg2;
....
int argN;
} func_args_t ;
void func(func_args_t *arg);

とするかです。

ここでは引数をintの配列にするのは意味的におかしい場合と考えてください。
また2.は実際は1個のstructではなくて意味的な塊で(複数の)structでまとめるべきですが、
ここでは例なので1個にまとめていると考えてください。
839デフォルトの名無しさん:2007/10/30(火) 00:27:04
関数の粒度が粗過ぎるか、階層構造になっていないのが原因
840825:2007/10/30(火) 00:27:30
>>830
> >>825
> Haahを渡す

すみません
Haahて何かしりません
841825:2007/10/30(火) 00:29:07
>>831
> >>825
> 渡すパラメータで処理が分岐するなら、関数を増やすと思う。

すべてのパラメータが使われるケースとしてください。
842デフォルトの名無しさん:2007/10/30(火) 00:29:20
>>825
global
843デフォルトの名無しさん:2007/10/30(火) 00:29:23
Hashのtypoだろ。気にする必要なし
844デフォルトの名無しさん:2007/10/30(火) 00:29:33
てかなんでCのネタしかないんだここw
845デフォルトの名無しさん:2007/10/30(火) 00:30:18
>>839
Win32APIのことですか
846825:2007/10/30(火) 00:30:27
>>832
> データ構造が先にありきで考えるだろ

上の例でいうと func_args_tはこの関数以外ではまず使われないとしてください。
847デフォルトの名無しさん:2007/10/30(火) 00:31:30
>>825
N個のintなら迷わず配列だろw
848デフォルトの名無しさん:2007/10/30(火) 00:31:30
>>844

>>825の問題の本質は、Cしか知らない視野の狭さに起因するな
849825:2007/10/30(火) 00:33:03
>>833
> >>825
> 渡すのだけが目的だよね?
> 関数から出力を受け取るといったポインタの方でしかできない事は考えないんだよね?

引数の意味は考えないでください。
引数の数だけの問題です。
上の具体例ではintでもint*でも構わないです。
850デフォルトの名無しさん:2007/10/30(火) 00:33:44
面倒だから構造体に全部突っ込んでthis状態
851825:2007/10/30(火) 00:34:18
>>835
> >>825
> vsprintfみたいに可変長引数にする

Nはイメージ的には8〜10ぐらいの定数としてください。
可変長ではないです。
852デフォルトの名無しさん:2007/10/30(火) 00:34:26
引数の数によるけど、同じ型があまり並ぶと順番間違えの危険があるので
他で使って無くてもこの場合構造体にする方が良さそうかな・・・
853デフォルトの名無しさん:2007/10/30(火) 00:34:33
callbackにしろ
854デフォルトの名無しさん:2007/10/30(火) 00:36:08
それどこの Ruby?
855デフォルトの名無しさん:2007/10/30(火) 00:42:25
JavaでいうところのDTOか
基本的に、DTOつくるのはダサいな
856825:2007/10/30(火) 00:48:53
一応僕の見解を書きます。
僕はコンシューマのゲームプログラマなので常にパフォーマンスを気にかけています。
なので可読性を落とさない範囲でなるべく効率のいいバイナリになることを意識します。

プリミティブ型の引数をだらだら並べる場合
- 読みにくい
- 同じ型が連続していると関数呼び出しの記述で引数を入れ替えて間違ってしまいやすい
- RISC系ではレジスタ渡しを存分に活用できるので高速に呼び出せる

構造体にする場合
- 構造体によって意味的なまとまりがわかりやすい
- 構造体によって メンバ名=値 という形式になるためパラメータの意味がわかりやすい
- 呼び出し側でいちいち構造体を用意する必要があるのでスタック等を消費する、メモリアクセスが起こる
- 呼び出され側でもポインタアクセスなので効率の点で不利(といってもほぼL1アクセス程度ですが)

今のところABIでレジスタ渡しに使えるレジスタ数を境めに決めています。
可読性、移植性(効率性の点で)を犠牲にしています。

857817:2007/10/30(火) 00:50:40
まぁ普通は、「そんなにたくさん引数を渡すことになることなんてない」
が、正解じゃないか?
858デフォルトの名無しさん:2007/10/30(火) 00:54:48
可読性考えなくていいなら、設問として破綻してね?
859デフォルトの名無しさん:2007/10/30(火) 00:55:01
今どき構造体なんて使うヤツおるの?バグの温床だろ?
何かよっぽど理由無いかぎり、もう使うなよ。
java は構造体を言語仕様から無くしちまっただろ?
オブジェクト指向プログラミングには構造体は不要。

引数が多い関数って、一見使いにくいように思えるが
コンパイラが引数チェックをある程度やってくれるだろ?
ところが構造体だと、値をセットし忘れるミスをコンパイラが検出できない。
しかも新人クンが大のニガテの「ポインタ」を使いまくり。

今更わざわざ構造体なんて使って時代と逆行する事ぁ無と思う。
860デフォルトの名無しさん:2007/10/30(火) 00:56:40
いつもの人だが、今帰ってきた。

strcmpは符号を返すわけではありません。
str1>str2 のとき、0より大きい数を、
str1<str2 のとき、0より小さい数を、
str1==str2のとき、0を返す、
と定義してあるだけです。
0はマジックナンバーです。

それから、C言語は論理型を整数型で代用しますが、
符号型を整数型で代用したりはしません。
それは、C言語に符号を調べる特別な演算子が無いことからも明らか。
C言語で整数値の符号を調べる時は、0との比較で調べます。
861デフォルトの名無しさん:2007/10/30(火) 01:01:39
>>859はどう見ても釣り
862825:2007/10/30(火) 01:01:52
>>859
> 今どき構造体なんて使うヤツおるの?バグの温床だろ?
> 何かよっぽど理由無いかぎり、もう使うなよ。
> java は構造体を言語仕様から無くしちまっただろ?
> オブジェクト指向プログラミングには構造体は不要。

class使えって話ですか?
別にclassでもいいですけど、そうなるとconstructorへの引数が多くなるという話になります。
本質的に何も変わりません。



863825:2007/10/30(火) 01:03:04
>>858
> 可読性考えなくていいなら、設問として破綻してね?

プログラミングで大事なのは可読性だけじゃないでしょ。
864デフォルトの名無しさん:2007/10/30(火) 01:03:17
いやそれは違うだろ
865デフォルトの名無しさん:2007/10/30(火) 01:03:21
レス乞食をレス乞食と見抜けない人は(掲示板を)使うのは難しい
866デフォルトの名無しさん:2007/10/30(火) 01:03:55
>>863
可読性考えなくて良ければ、構造体使う必要ないし
867デフォルトの名無しさん:2007/10/30(火) 01:04:19
>符号型を整数型で代用したりはしません。
>それは、C言語に符号を調べる特別な演算子が無いことからも明らか。
これ間違い
868デフォルトの名無しさん:2007/10/30(火) 01:05:22
よ、真打登場w

> それから、C言語は論理型を整数型で代用しますが、
> 符号型を整数型で代用したりはしません。
> それは、C言語に符号を調べる特別な演算子が無いことからも明らか。
全然明らかじゃないんですけどwww

てかさ、言語仕様に「論理型を整数型で代用します」なんて、どこに書いてあるのか明示してよw
869デフォルトの名無しさん:2007/10/30(火) 01:06:20
C使わないにしてもポインタの概念は知っといた方がいいだろ
870817:2007/10/30(火) 01:07:43
mem系のことも、たまには思い出してあげてください・・・。
871デフォルトの名無しさん:2007/10/30(火) 01:08:23
それから、仮にstrcmpが返す数の符号が問題になったからといって、
その符号を調べるために、「!」を使うのはおかしい。
「!」は真偽を反転されるために有るのであって、符号を調べるために有るのではない。
「!」を使ってもゼロフラグが立っているかどうかが分かるだけであって、
符号が分かるわけではない。符号を調べるには、さらに最上位bitも調べる必要がある。
だけど、そんな面倒なことはしたくないし、だれもやらないので、
C言語では特別な構文は用意せず、かわりに 0 との大小関係を調べることになってる。
つまり、C言語で符号を調べたい時は、「>=0, <=0, >0, <0, ==0」 を使う。
0 との比較をするのがどうしても嫌だというなら、
>>694 のように書くしか他に方法はない。
872825:2007/10/30(火) 01:08:31
>>866
> >>863
> 可読性考えなくて良ければ、構造体使う必要ないし


つーか可読性考えなくていいなんて言ってないよ
現実的な判断基準の話をしたい
873デフォルトの名無しさん:2007/10/30(火) 01:12:50
>>862
え、Cの話かと思ってました。
classがOKなら
setHoge(10);
setHage(20);
setFuga(30);
・・・
execute();
が可能かと。
874デフォルトの名無しさん:2007/10/30(火) 01:14:52
>>868
isdigit の戻り値はintだが、
ドキュメントには、引数が数値のとき、「真」を返すと書いてある。
逆に、「0以外の値」を返す、とは書いてない。
ドキュメントレベルで、「真偽」という言葉が出てくる。
つまり、Cは整数で真偽を代用する。

一方、
strcmpの戻り値もintだが、こちらには、
str1>str2 のとき、0より大きい「数」を返すと書いてある。
逆に、正の数を返す とは書いてない。
つまり、Cは整数で符号を代用しない。
さらに付け加えれば、符号を返すとも書いてないし、まして真偽を返すとも書いてない。
あくまで数を返すと書いている。
敷居値となっている 0 はマジックナンバーでしかない。
875デフォルトの名無しさん:2007/10/30(火) 01:16:50
>>862
いや別に一度にコンストラクタに渡さなくてもいいじゃん
876デフォルトの名無しさん:2007/10/30(火) 01:17:54
>>867
では、Cで符号を調べる演算子は何ですか?
877デフォルトの名無しさん:2007/10/30(火) 01:18:37
>>862
無理してクラス使わんでもいいよ。
クラスが嫌なら引数の多い関数使えばいいんだよ。
全然問題無い。

だが、いったい何のために先人たちが苦労して
構造体を廃止してまでクラスを作ろうとしているのか。
それを考えた方がいい。
878デフォルトの名無しさん:2007/10/30(火) 01:19:04
>>876
誰もあると言ってないが?
879デフォルトの名無しさん:2007/10/30(火) 01:20:15
!strcmp と書く皆さんは、これからは >>694 のように書いてくださいね。
そしたら誰も文句言わないから
880デフォルトの名無しさん:2007/10/30(火) 01:22:05
>>874
どんなドキュメントに書いてあったんだ?
ANSIの仕様書にでも書いてあったか??
日本語訳とかじゃなくて、ちゃんと原書を見て調べたのか???

だから、
> つまり、Cは整数で真偽を代用する。
これがどこに明記されているか、さっさと出典を示せよ。
881デフォルトの名無しさん:2007/10/30(火) 01:23:15
>>878
では、C言語で「符号型」は整数型を使ってどのように表されますか?
もし、aが正の整数かどうか調べる場合は、どう書けばよいですか?
if ( a && !(a&-0x80000000) ){}
ですか(笑
882デフォルトの名無しさん:2007/10/30(火) 01:23:32
>str1>str2 のとき、0より大きい「数」を返すと書いてある。
>逆に、正の数を返す とは書いてない。
0より大きい数と正の数の違いは何?
883デフォルトの名無しさん:2007/10/30(火) 01:24:27
>>879
!str...はそれ自体そういうものとして読まれてるのに整数云々みたいな
ありえない脳内前提をして批判しても意味ないよ。馬鹿だなあ
884デフォルトの名無しさん:2007/10/30(火) 01:24:46
バカばっか
885825:2007/10/30(火) 01:25:18
>>875>>877

classかstructかはどっちでもいいです。
オブジェクト指向の話はおいておいてください。
funcに必要なパラメータを渡すにあたって
プリミティブ型をだらだら渡すか、class/structを定義してそのポインタを渡すか
その判断基準はどうしてる?という話です。

886デフォルトの名無しさん:2007/10/30(火) 01:25:46
>>881
違うよ
自分で言ってるじゃん
>C言語で整数値の符号を調べる時は、0との比較で調べます。
887デフォルトの名無しさん:2007/10/30(火) 01:28:36
文法ばっか見て矛盾だ〜ってほんと阿呆だよな。
そんな命題はいくらでも生成できる。
今までどんな教育を受けてきたのか。
888デフォルトの名無しさん:2007/10/30(火) 01:28:45
>>879
>>694のコードでは、私の持っているコンパイラでコンパイルできない物があるのですが?
その様なコードを自慢げに正しいコードなどと言われても非常に困ります

また、マジックナンバーを否定するのであれば、マジックナンバーを使用しない
!strcmp(str1, str2)
という表現の方が、
strcmp(str1, str2) == 0
という表現よりも優れていると思います
889デフォルトの名無しさん:2007/10/30(火) 01:29:25
>>880
manコマンドで調べろ。

>>882
0 より大きい数という言い方をした場合、0 はマジックナンバー。
コンピュータの都合で、たまたま 0 と比べているだけで、もしかしたら、
「 1 より大きい数 」 という仕様だったかもしれない。
0 より大きいか小さいかが問題だといっているのだから、
0 との大小関係を比較すべき。

一方、正の数という言い方をした場合、これは明らかに符号を問題にしている。

だけども、どっちにしろC言語で整数の符号を調べる場合は、0 との大小関係を調べるしかない。
さもなくば >>694 か。
890デフォルトの名無しさん:2007/10/30(火) 01:33:12
何ごちゃごちゃ喧嘩してんだよ。
ISO9899:1999から引用しろ。それ以外は議論に値しない。
891デフォルトの名無しさん:2007/10/30(火) 01:34:17
!strcmpをBoostで検索して
そのヘッダの作者名を見ればもう話は終わりだと思う
892デフォルトの名無しさん:2007/10/30(火) 01:35:01
ISO9899:1999で真はnonzeroとある
893デフォルトの名無しさん:2007/10/30(火) 01:36:03
>>886
0 と比較するということは、それはC言語では符号は特別視しないということ。
整数で代用された論理型のように、「!」のような演算子は用意されて無いからね。

もし仮に、こんな感じに記述できるのなら、Cは整数で符号を代用しているといえるのだがな。
if( $a ){} /* aは正の数 */
if( ?a ){} /* aは負の数 */
でも実際は、C言語に符号を調べるための特別な演算子は用意されて無いだろ。
894デフォルトの名無しさん:2007/10/30(火) 01:36:45
>>885
コイツ、最強のアフォ!

struct 使うな、と言えば 「class使えって話ですか?」
クラス使わんでもいい、と言えば 「classかstructかはどっちでもいいです。」

もう相手するだけバカバカしい。無視しとこ。
895デフォルトの名無しさん:2007/10/30(火) 01:39:03
>>888
マジックナンバーが関数の仕様の定義に入っちゃってるんだから、
むしろマジックナンバーに従うべき。
使う側は作った側に従うしかない。
896デフォルトの名無しさん:2007/10/30(火) 01:40:12
>>889
ですから、>>694のコードは私の環境ではコンパイル出来ません!
897デフォルトの名無しさん:2007/10/30(火) 01:40:42
>>892 さん が代わりに調べてくれたようだが、
「真」の定義はあったようだね。
で、同じように「正の数」の定義はありましたかね。
898デフォルトの名無しさん:2007/10/30(火) 01:42:02
>>896
お前が勝手に擬似コードをコンパイルしようとしているだけだろ。
899デフォルトの名無しさん:2007/10/30(火) 01:43:00
>>885
そろそろ可哀想だからレス
上手いことまとめられる時だけ構造体、基本的にはだらだら
実際にこうなっちゃったときは設計を見直すから机上論的なものになるけど
900デフォルトの名無しさん:2007/10/30(火) 01:43:18
正の数と負の数の限界ならlimits.hにありますね。
901デフォルトの名無しさん:2007/10/30(火) 01:44:21
>>894
相手してるのはお前だけ。他はとっくに無視してるから心配すんな。
>>825 は struct を使え、って答えを期待してるのがミエミエだろ?
「だれか、struct を使ったほうが良いよ、って言ってくれませんか」って呼びかけているんだよ。
反対の意見は耳に入れるつもりは全然無い。
「自殺したいから背中を押してくれませんか」って呼びかけているんだよ。
902デフォルトの名無しさん:2007/10/30(火) 01:44:54
>>900
それは整数の取れる範囲を示したものであって、
「正の数」や「負の数」を定義したものではないよね。
903デフォルトの名無しさん:2007/10/30(火) 01:47:25
ISO9899を見ているとnegativeとかnonnegativeという語が
ひっきりなしに出てくるんですがこれは何を意味するとお考えでしょうか。
904デフォルトの名無しさん:2007/10/30(火) 01:48:14
埋め
905デフォルトの名無しさん:2007/10/30(火) 01:49:09
あるいはこう言い換えてもいいな。

signed と unsigned の違いは何ですか?
906デフォルトの名無しさん:2007/10/30(火) 01:49:25
>>868
「代用」の使い方が他人と違うんじゃないかな
907デフォルトの名無しさん:2007/10/30(火) 01:50:25
>>898
>>694のコードは私のコンパイラではコンパイルは出来るのですが、
正しく動作していないようです
908デフォルトの名無しさん:2007/10/30(火) 01:52:04
>>907
どのコンパイラ?
909デフォルトの名無しさん:2007/10/30(火) 01:53:02
大体さ、符号ってのは、2の補数を使う環境では、
ゼロフラグ(CPUにあればの話) と 最上位bit の兼ね合いで決まるんだよ。
C言語ではゼロフラグを反転したものが論理値だが、
かたわれの、最上位bit を簡単に調べる構文は用意されていない。
だからC言語で符号を調べる場合は 0 と比較することになってる。
910デフォルトの名無しさん:2007/10/30(火) 01:55:05
>>909
それはISO9899:1999の§いくつに書いてありますか?
911デフォルトの名無しさん:2007/10/30(火) 01:56:55
>>910
符号を調べる演算子が ISO9899:1999 にでも書いてあるのか?
書いてないなら 0 と比較するしかやりようがないだろ。
912デフォルトの名無しさん:2007/10/30(火) 01:57:15
ちなみに「自分で探せ」というのはだめですよ。

挙証責任を守って下さい。
913デフォルトの名無しさん:2007/10/30(火) 01:57:47
>>889
> manコマンドで調べろ。
ごまかすなよw
そんなに怖がらずに、ちゃんと自分の言葉で説明してごらん。
914デフォルトの名無しさん:2007/10/30(火) 01:58:10
>>911
だからそれがISO9899:1999のどこに書いてあると。
書いてないのならあなたの論も意味をなさなくなりますが。
915デフォルトの名無しさん:2007/10/30(火) 01:58:34
>>897
いや定義としてあったわけじゃなくて
「〜 true (nonzero) 〜」みたいに文脈中で換言されてたのを見かけただけ
916825:2007/10/30(火) 01:58:57
>>894
え?
プリミティブ型だらだら派というわけですか?
じゃあ関係のないjavaだのオブジェクト指向だの言った意味がわかりません。
917デフォルトの名無しさん:2007/10/30(火) 02:00:25
>>914
では一体どうやってC言語で符号を調べるんだよ。
符号を調べる方法が何処にも書いてないから、
0 と比べるしかないよねといってるのに、書いてるところを示せといわれても困る。
何処にも書いてないんだもの。
918デフォルトの名無しさん:2007/10/30(火) 02:01:37
>>917
質問を質問で返すのは失礼ですよ。議論の基本があなたはなってない。
まず自分に投げかけられた質問に答えてからしかる後に質問をしなさい。
919デフォルトの名無しさん:2007/10/30(火) 02:03:09
>>916
実際問題、Cの話かC++の話か限定しないとどうにもならんよ
920デフォルトの名無しさん:2007/10/30(火) 02:04:43
>>915
それで十分だよ。
true (nonzero) ってことは true is nonzero ってことだからね。
一方で、negative の説明は有りますかね。
negative is negative とかやめてよ。
たしか、C言語で負の数をどう扱うかは実装依存だったはず。
921デフォルトの名無しさん:2007/10/30(火) 02:04:49
>>917
0と比べるしかないっていうのはISO9899のどこに書いてありますか?
922デフォルトの名無しさん:2007/10/30(火) 02:07:10
書いて無いと思うよ
923825:2007/10/30(火) 02:07:42
>>901
> >>894
> 相手してるのはお前だけ。他はとっくに無視してるから心配すんな。

そんなつまらないネタかな?
どっちでもいいことながら悩んでしまうところなんだけど。

> >>825 は struct を使え、って答えを期待してるのがミエミエだろ?
> 「だれか、struct を使ったほうが良いよ、って言ってくれませんか」って呼びかけているんだよ。
> 反対の意見は耳に入れるつもりは全然無い。
> 「自殺したいから背中を押してくれませんか」って呼びかけているんだよ。

プリミティブだらだらか、struct/classかどっちにする?って話じゃないよ。
そんなの当然どっちもありなわけです。
どっちにするかの判断基準はどうしてるの?ってことです。
924デフォルトの名無しさん:2007/10/30(火) 02:07:45
>>918
書いていないって言ってるじゃん。
無いことの証明が出来ないって知らないの?
「悪魔の証明」って知らない? 立証責任があるのはあなたの方ですよ。
人に失礼とか言う前に議論するうえで最低限知っておかなければならないことだと思うが。
925825:2007/10/30(火) 02:09:05
>>919
> >>916
> 実際問題、Cの話かC++の話か限定しないとどうにもならんよ

じゃあC++にしましょう。
どう思います?
926デフォルトの名無しさん:2007/10/30(火) 02:10:19
>「悪魔の証明」
厨ワード入りマース
927デフォルトの名無しさん:2007/10/30(火) 02:11:13
>>923
CとC++じゃ評価基準が違うだろ
もっといえば、関数で渡すものの質が全く違う
928デフォルトの名無しさん:2007/10/30(火) 02:12:43
>>924
悪魔の証明?どこが?
どこに書いてあるのかと聞いているのに、この場合悪魔の証明とは
どこにも書いてない事を証明する事になる。
180度違うだろ?え?
929デフォルトの名無しさん:2007/10/30(火) 02:14:11
>>921
大小を比較する演算子の定義は
6.5.8 Relational operators に書いてある。

だけど、それ以外に符号を調べる方法が有るのを証明するのはあなたの責任。
930825:2007/10/30(火) 02:14:20
>>927
いちおう>>925のとおりC++でってことにしました。
でもCの場合とC++の場合でどういう基準で決めるのかの結論がかわるなら、それぞれ教えて欲しいです。
931デフォルトの名無しさん:2007/10/30(火) 02:14:31
>>924
相手もあるとは言ってないんじゃないの
932デフォルトの名無しさん:2007/10/30(火) 02:15:17
>>929
こらこら責任転嫁は良くありませんね。
>>917
>0 と比べるしかないよねといってるのに、書いてるところを示せといわれても困る。
と言ったのはあなたですよ。

だからあなたが0と比べるしかない事を証明しなくてはならないのです。
933デフォルトの名無しさん:2007/10/30(火) 02:17:25
>>930
C++限定なら話は簡単
引数をまとめるためだけに構造体を切るなどありえない
934デフォルトの名無しさん:2007/10/30(火) 02:17:43
>>923
引数に構造体を積極的に使うのはむしろ好ましいと思う。
ただ、必ずしもすべての引数を一つにまとめる必要は無いと思う。
935デフォルトの名無しさん:2007/10/30(火) 02:18:43
>>928
お前バカだろ。
おれは、唯一 A しかない、といってるんだよ。
唯一 A しかないことを証明するのは、
BもちがうしCもちがうしDもちがうし・・・・・・ZもちがうしAAもちがうし・・・AAAもちがうし・・・
と永遠に全ての要素が違うということを示さないといけないので無理。

A 以外にも、条件を満たす要素があるということを立証するのはお前の仕事。
お前は B でも出来るじゃん と一つ示せばいいだけだからな。
936934:2007/10/30(火) 02:19:18
うは、リロードしたら話題がC++になってた。なんというフェイント。
937デフォルトの名無しさん:2007/10/30(火) 02:20:32
936に萌えた
938デフォルトの名無しさん:2007/10/30(火) 02:20:34
>>935
俺が言っているのはそういう事ではない。
ISO9899にも書いてない、「0と比べるしか符号を調べる方法はない」という
あなたの意見を私が黙って受け入れられない、と言っているのです。

ISO9899だけをより所にしているんですから。だからISO9899に書いてない事が
わかったなら、貴方はそこで黙らなければならない。
939825:2007/10/30(火) 02:20:45
>>899
> >>885
> そろそろ可哀想だからレス
> 上手いことまとめられる時だけ構造体、基本的にはだらだら
> 実際にこうなっちゃったときは設計を見直すから机上論的なものになるけど

もうちょっと相手を
設計をどんな感じで見直して解決するんですか?
940デフォルトの名無しさん:2007/10/30(火) 02:21:00
>>927
相手にすんなって。
コイツは自分の期待した答え以外は全く受け付けないヤツだからさ。

○○だから、こっちにしろ、と書いたら
「○○は関係無いです。どっちにするかの判断基準はどうしてるの?ってことです。」
って延々帰すだけだから。
コイツ、人口無能みたいやなw
941デフォルトの名無しさん:2007/10/30(火) 02:24:19
intは32bitとは限りません
16bitである場合もあります
942825:2007/10/30(火) 02:24:20
>>934
> >>923
> 引数に構造体を積極的に使うのはむしろ好ましいと思う。
> ただ、必ずしもすべての引数を一つにまとめる必要は無いと思う。
>>936
>うは、リロードしたら話題がC++になってた。なんというフェイント。

すみません、classかstructかでどう話がかわるか興味があったのでC++にしました。
確かに関数への引数が多いときは構造体にしろとは教科書的によく言われていると思います。
C++だったら話かわりますか?
943デフォルトの名無しさん:2007/10/30(火) 02:24:27
Javaでの話に一度は乗ってきたかと思いきや
関係ないとか言い出すしね
944デフォルトの名無しさん:2007/10/30(火) 02:24:45
>>932
>>935 の理由より、立証責任はあなたにあります。
「C言語で符号を調べるには、0 と比較するしかない」
には立証責任は無い。
少なくとも、>>929 に、0 と比較することで、符号が分かることは示した。
そして、それ以外の方法は、どうも見当たらない、と主張しているわけで、
他の方法があるというのなら、他の方法を実際に示して見せるのはあなたの責任。
945825:2007/10/30(火) 02:25:27
>>933
> >>930
> C++限定なら話は簡単
> 引数をまとめるためだけに構造体を切るなどありえない

でどうします?
946デフォルトの名無しさん:2007/10/30(火) 02:26:37
>>944
何度も言いますが、その論理はおかしい。

>「C言語で符号を調べるには、0 と比較するしかない」
>には立証責任は無い。

というのはあくまでも貴方が勝手に決めたルール。そのルールに
私は従うも従わないも自由なのです。
だから立証責任を私に押しつけるのは貴方の我が儘なのです。
あなたが証明しなくてはなりません。
947デフォルトの名無しさん:2007/10/30(火) 02:29:40
人口無能ワロス。

久々聞いた。
ってか、ほんとは「人口無脳」やろ?わざと?
948933じゃないけど:2007/10/30(火) 02:30:54
お前さんが聞きたいのは「だらだら渡すか構造体にするかの判断基準」だろ?
933はC++ならそれ以外の解があるって言ってるんだろ。
でも、その話は聞きたくないんだよな?
949デフォルトの名無しさん:2007/10/30(火) 02:31:56
>>940
人口無能って...人工だろうよ...何だ、統計調査でもやるのか?
950デフォルトの名無しさん:2007/10/30(火) 02:32:21
>>945
設計が妥当であるという前提でいくと、
> でどうします?
の答えは、「どうもしない」としかいいようがない
951947:2007/10/30(火) 02:32:37
orz
952デフォルトの名無しさん:2007/10/30(火) 02:33:22
しかし簡単な議論もまともに出来ないのによくプログラマやってますね。
そうやって人に責任転嫁をしていれば製品が出来上がるの?
結局は自分の責任で最後まで作らなくちゃどうしようもないでしょう。
953デフォルトの名無しさん:2007/10/30(火) 02:35:25
>>952
そこが面白いとこだよ
なぜまともに解答を求められないのにプログラムが書けるのか?
954デフォルトの名無しさん:2007/10/30(火) 02:35:44
>> つまり、Cは整数で真偽を代用する。
>これがどこに明記されているか、さっさと出典を示せよ。
これに対するレスあったっけ
955デフォルトの名無しさん:2007/10/30(火) 02:36:05
そういうところにこの手の問題の真の解答があると思うんだよね、ボク(キリリ
956デフォルトの名無しさん:2007/10/30(火) 02:36:45
>>954
無い
「0以外は真」しか出ていない
957デフォルトの名無しさん:2007/10/30(火) 02:36:46
>>953
どこかで現実と妥協してるからでしょ。
規格書が100%正しいとしても規格書に書いてない事は
自分で判断していくしかない。人にそれを責任転嫁するなど
もってのほかです。
958825:2007/10/30(火) 02:37:23
>>950
> >>945
> 設計が妥当であるという前提でいくと、
> > でどうします?
> の答えは、「どうもしない」としかいいようがない

え?

>>933
> >>930
> C++限定なら話は簡単
> 引数をまとめるためだけに構造体を切るなどありえない

でしょ?
C++限定なら「どうしようもない」、つまり引数だらだらですか?
Cなら構造体?

なぜそうなるか教えてください。
僕理解力ないですか?
959デフォルトの名無しさん:2007/10/30(火) 02:38:22
>>947,949,951
久々にワロタww
960デフォルトの名無しさん:2007/10/30(火) 02:38:36
だから素直に>>944

「0と比べるしかない理由は俺にはわからない。でもそれでちゃんと
動いてるんだからそれでいいんでしょ。証明しなくてもいいから。」と
素直に言えばいいものを。

事もあろうに私に証明しろなんて言い出すものだから話がこじれるのです。
961デフォルトの名無しさん:2007/10/30(火) 02:38:51
>>938
ISO9899 だけをよりどころにしているのなら、
>>929 で書いたとおり、符号を調べる方法は、
ISO9899 には関係演算子を使ったものしかかかれてないのだから、
「符号を調べるには、0 と 比べるしかない」
って結論になるよね。だって他にかかれてないのだから。
私が言ってるのではないですよ。あなたの大好きな ISO9899 が言ってるのです。
962デフォルトの名無しさん:2007/10/30(火) 02:40:37
>>961
あれれ?
ISO9899に関係演算子を使った物しか書いてない事が、どうして
「符号を調べるには、0と比べるしかない」という結論に至るのですか?

なんか論理の飛躍を感じるんですが。
963デフォルトの名無しさん:2007/10/30(火) 02:40:42
・文法的に正しい(コンパイルエラーにならない)
・ある程度一般化している
こうした書き方を単に「読み辛い」という理由で
ローカルなルールで禁止するといのは実に愚かだと思う。
ルールを覚えるより、書き方(読み方)を覚えた方が早いだろ。
964デフォルトの名無しさん:2007/10/30(火) 02:41:01
規格書に従うと規格的に規格化されないんじゃないの、そもそも
965デフォルトの名無しさん:2007/10/30(火) 02:42:28
>>964
頼むから日本語で書いて。
966デフォルトの名無しさん:2007/10/30(火) 02:42:38
>>963
読みづらいのは駄目だろ
パッと見て読めるものをいちいち解体して細部から否定するのはナンセンスだと思うけどね
967デフォルトの名無しさん:2007/10/30(火) 02:43:40
>>962
>> つまり、Cは整数で真偽を代用する。
>これがどこに明記されているか、さっさと出典を示せよ。
これに対するレス頂戴
968デフォルトの名無しさん:2007/10/30(火) 02:43:44
ここで屁理屈をこねている奴は前にもデザパタのスレでああでもない
こうでもないと自分の理屈を人に押しつけていた奴と同じ匂いを感じる。
969デフォルトの名無しさん:2007/10/30(火) 02:43:46
>>946
だから「無い」ことは立証できないんだって。
「有る」と主張する方に立証責任が発生する。

おれは 0 と比較する以外に符号を調べる方法は「無い」と主張している。

他に方法があるというなら(反論したいなら)そっちに立証責任が発生する。
これは俺のルールじゃない。議論するうえでの最低限のマナー。
お前の大好きな ISO9899 にはこんな基本的なことは書いてないが、
ISO9899 作った奴らもみんな守ってることだからお前も守れ。
970デフォルトの名無しさん:2007/10/30(火) 02:44:56
>>967
それは俺が言い出したんじゃないよ。
言い出してもいないし、ましてや書いてもいないから。
言い出した、もしくは書いた本人に聞いておくれ。
971デフォルトの名無しさん:2007/10/30(火) 02:44:57
次スレ誰かたてて
タイトルとテンプレ↓


ぱっと見て「ヘタだなぁ」と思うコード その7


禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名

過去スレ
その6: http://pc11.2ch.net/test/read.cgi/tech/1193250955/
その5: http://pc11.2ch.net/test/read.cgi/tech/1155315371/
その4: http://pc8.2ch.net/test/read.cgi/tech/1153312202/
その3: http://pc8.2ch.net/test/read.cgi/tech/1149986051/
その2: http://pc8.2ch.net/test/read.cgi/tech/1142741989/
初代 : http://pc8.2ch.net/test/read.cgi/tech/1141867015/
972デフォルトの名無しさん:2007/10/30(火) 02:44:59
仕様書なんて後から作られるものだからな。ガンダムに例えると(ry
973デフォルトの名無しさん:2007/10/30(火) 02:45:44
>>970
そっか
君じゃなかったのね

じゃ書いた人お願い
974デフォルトの名無しさん:2007/10/30(火) 02:45:56
議論(笑)の内容はどうでもいいんだけど、960の喋り方は気持ち悪い。

>> 958
> 設計が妥当であるという前提でいくと、
ここをきちんと読め。
C++では、設計が妥当になされていれば、パラメータが無駄に多くなることは少ない。
で、その上で、どうしようもないときはどうしようもない。
しかし、構造体でパラメータを渡すことには意味がない。
975デフォルトの名無しさん:2007/10/30(火) 02:46:10
>>969
誰も「無い」事を証明しろとは言ってないでしょう。
「0と比較する事が符号を調べる唯一の方法です」という貴方の
意見を証明して、と言っているのですよ。

曲解しないように。
976デフォルトの名無しさん:2007/10/30(火) 02:46:29
>>954
>>892 さんが調べてくれた。
true (nozero) という記述を見かけたそうだ。
真は非ゼロ。
977デフォルトの名無しさん:2007/10/30(火) 02:47:12
>>969
んで反証するともしないとも言ってない
978デフォルトの名無しさん:2007/10/30(火) 02:48:31
>>969
そういう事。反証するつもりはないんですよ。
あなたが規格書に書いてない事を言い出したから、根拠を
言ってください、とこんな簡単な事を言っているだけなんですよ。
979デフォルトの名無しさん:2007/10/30(火) 02:48:45
C++の場合は、
http://www.fujigoko.tv/rev/prof/
の、文書的プログラミングとは?
の桃太郎の部分を参考に。

・オブジェクトの状態を変える(セットする)
・何らかの処理を行って結果を返す

この2つは分けるのがC++の基本です。

で、オブジェクトの状態を変えるときにはいっぺんに複数の
パラメータを変化させるのではなくて、
変化するパラメータと、それには影響しないパラメータを分離します。
というやり方で引数だらだらを避けます。
980デフォルトの名無しさん:2007/10/30(火) 02:49:29
>966
補足。

「一般化している」のだから「読み辛い」のは「個人的理由」に他ならない。

以下阿呆止め。
「環境依存で良ければ、Cで符号を調べる方法は0との比較以外にあるかもしれない」
981デフォルトの名無しさん:2007/10/30(火) 02:50:05
> そういう事。反証するつもりはないんですよ。
これでは議論にならない。
なに?タモさん?
982デフォルトの名無しさん:2007/10/30(火) 02:50:11
>>976
「代用する」って書かれてる?あるならどこ?
あと「代用」の意味をお願い
983デフォルトの名無しさん:2007/10/30(火) 02:50:46
>>981
強いて言えば「規格書に書いてない事を貴方が言い出したから、
証明してね(はぁと)って事です。
984デフォルトの名無しさん:2007/10/30(火) 02:52:31
証明すればいいだけの簡単な話なのに、やれ「悪魔の証明」だの
やれ「お前が証明しろ」だの、そういう議論に反する事を言われるので
引っ掛かるのです。

もしくは「証明できないけどちゃんと動くからいいだろ」でもいいのです。
985981:2007/10/30(火) 02:52:56
あぁ、ごめん。俺はお前の相方じゃない。
通りすがりで書いただけ。
986デフォルトの名無しさん:2007/10/30(火) 02:53:03
>>960
は?
符号を調べるときに、0と比べる以外の方法は ISO9899 には明記されていませんよ。
理由が無いわけではない。他に明記されてない、という確たる理由がある。
他にもあるというのなら、その人が、「ここにも書いてあるよ」と立証するしかない。
そうじゃないかぎり、私の言い分が正しいと認められたことになる。
987デフォルトの名無しさん:2007/10/30(火) 02:54:18
>>986
何それ?根拠もなしに「私は正しい」と言うのですか?
馬鹿ですか?
小学生のケンカでもそんな馬鹿な言い方はしませんよ。
988デフォルトの名無しさん:2007/10/30(火) 02:56:31
>>986
あと、

>理由が無いわけではない。他に明記されてない、という確たる理由がある。

これをkwsk。
989825:2007/10/30(火) 02:56:55
>>974
> 議論(笑)の内容はどうでもいいんだけど、960の喋り方は気持ち悪い。
>
> >> 958
> > 設計が妥当であるという前提でいくと、
> ここをきちんと読め。
> C++では、設計が妥当になされていれば、パラメータが無駄に多くなることは少ない。

C++ならパラメータが多くなることはないってそんなこと一般化できるわけないです。
パラメータが減る根拠あげられますか?
さらにCにするとC++に比べてパラメータが多くなるってことならそんな設計もありえないです。
オブジェクト指向言語とオブジェクト指向設計の区別がついていないのでは?

> で、その上で、どうしようもないときはどうしようもない。
> しかし、構造体でパラメータを渡すことには意味がない。

こっちも根拠が知りたいです。
990デフォルトの名無しさん:2007/10/30(火) 02:57:49
うざいから漏れが判定しちゃる。
双方阿呆だ。
まず>909で他に方法が無いと言い切っているが、ISO9899に書いてない方法もある。
それに対し、ISO9899のどこに書いてあるかと切り替えした時点で、相手も阿呆確定。
991デフォルトの名無しさん:2007/10/30(火) 02:59:08
>>990
割り込まれるのなら環境依存じゃない方法でお願いします。
992デフォルトの名無しさん:2007/10/30(火) 02:59:23
規格に明記されてない事は未定義。
規格上、未定義な事はできてもできなくても構わない。
993デフォルトの名無しさん:2007/10/30(火) 02:59:43
>>990
実は
if ( a>=0 ) /* 正 */
という方法があるんだけど、これは内緒だよ
994デフォルトの名無しさん:2007/10/30(火) 03:00:17
>>989
やっぱりアホだったか
995デフォルトの名無しさん:2007/10/30(火) 03:00:32
ごめん

>>990
実は
if ( a>=1 ) /* 正 */
という方法があるんだけど、これは内緒だよ

と書こうとした。
996デフォルトの名無しさん:2007/10/30(火) 03:00:51
997デフォルトの名無しさん:2007/10/30(火) 03:01:13
>>992
やはりそうですよね。
>>986が「私は正しい」とか宗教じゃないんだから┐(´ー`)┌ヤレヤレ

>>993
それ0と比べてる
998デフォルトの名無しさん:2007/10/30(火) 03:02:06
では>>992で結論も出たようですしここら辺で
999デフォルトの名無しさん:2007/10/30(火) 03:02:59
999
1000デフォルトの名無しさん:2007/10/30(火) 03:03:03
だから何度も、無いことの証明は出来ないっていってるだろ。低脳は帰れ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。