ぱっと見て「ヘタだな ..
2:デフォルトの名無しさん
07/10/25 03:50:58
余裕の2GET
3:デフォルトの名無しさん
07/10/25 03:52:31
そして、1乙。
4:デフォルトの名無しさん
07/10/25 08:59:17
アホが群がって自分の趣味をぶつけ合うだけの糞スレイラネ
5:デフォルトの名無しさん
07/10/25 10:48:00
>>1
左定数も禁止ネタに入れとけよ
6:デフォルトの名無しさん
07/10/25 10:50:46
if(0 == a)
はでメリットがない上に明確なメリットがある以上
やらない奴は低能。
7:デフォルトの名無しさん
07/10/25 10:56:03
>>6 シンプルかつ充分な燃料おつw
8:デフォルトの名無しさん
07/10/25 10:57:01
・memset
・malloc - free
の禁止ネタって何だ?
9:デフォルトの名無しさん
07/10/25 12:32:55
KENT-WEBのスクリプト全般
10:デフォルトの名無しさん
07/10/25 15:27:37
if( a == 0 ){}
と
if( 0 == a ){}
では、同じコードになる保証は何処にもない
判りやすく、C++で解説するならば
前者は
if ( a.operator==( 0 ) ){} // オブジェクトaの==メソッドの呼び出し
であり
後者は、
if ( operator==( 0, a ) ){} // グローバルな==関数の呼び出し
となるからである
11:デフォルトの名無しさん
07/10/25 15:29:07
ヘタな実装前提にして叩くなよw
12:デフォルトの名無しさん
07/10/25 15:43:23
バカか
>>10は左定数擁護派だ
13:デフォルトの名無しさん
07/10/25 16:53:26
>>8
> ・memset
char* p = malloc(1024);
memset(p, 0x00, 1024);
とするのは是か非かという話題。
・必要ないのになんでヌルクリアするの?派
・したってそれほど実害ないじゃん派
の二派に分かれる。
[私見] 前者が妥当
> ・malloc - free
main()が終了する前に、free()は必要なのかという話題。
・自分でmalloc()したんだから、free()するのは当然派
・OSが回収する資源だからしなくても良い。free()が難しいデータ構造だってあるじゃん派
過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
[私見] 後者が妥当
14:デフォルトの名無しさん
07/10/25 17:51:51
>>13
> 過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
ありがとううう!! そういう具体的な情報は嬉しいね。
俺の私見:
char *pの事前のmemsetは不要なのでしない。
(ただしcalloc(1, sizeof(hoge));は多用する)
main終了前のfreeは不要なのでしない。
↑禁止ネタにこういうレスしたらダメでしょうか?わかりません><
15:デフォルトの名無しさん
07/10/25 17:53:02
決め付けたら、余計荒れるだろ
16:デフォルトの名無しさん
07/10/25 18:13:18
暗黙の宣言は利用しないと言う原則から行けば
memsetはした方がいいし、できる限りfreeする方がいいだろう
しかし、定数は右に置くべきだろう
17:デフォルトの名無しさん
07/10/25 18:18:45
何かやっておきたいのならchar *p;*p = '\0';で充分では。
18:デフォルトの名無しさん
07/10/25 18:20:58
char *p = malloc(size);*p = '\0';な。突っ込まれるまえに。
19:デフォルトの名無しさん
07/10/25 18:25:06
>>18
その書き方なんか気持ち悪いんだけど...
char *p = malloc(size);
strcpy(p, "");
の方が好き
20:デフォルトの名無しさん
07/10/25 18:45:30
スルー力が試される昨今、みなさんいかがお過ごしですか
21:デフォルトの名無しさん
07/10/25 18:57:23
スルーするくらいなら居ないほうがマシだぞ
22:デフォルトの名無しさん
07/10/25 19:54:22
>>20
スルー力って、新種のイカかと思った
23:デフォルトの名無しさん
07/10/25 20:10:27
>>22
【審議中】
∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
【結果発表】
パッ パッ パッ パッ パッ パッ
[チラ] [シの] [裏に] [書き] [やが] [れ!]
‖∧,,∧ ‖∧,,∧ ‖∧,,∧ ‖∧,,∧ ‖∧,,∧ ‖∧,,∧
∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`) ∩・ω・`)
( ). ( ). ( ) ( ) ( ) ( )
`u-u´ `u-u´ `u-u´ `u-u´ `u-u´ `u-u
24:デフォルトの名無しさん
07/10/25 20:12:56
>>23
お前がな!
(顔ズレてるじゃんよ)
25:デフォルトの名無しさん
07/10/25 20:24:26
悪くないスレの出だしだ。
26:デフォルトの名無しさん
07/10/25 20:44:10
Win32APIの糞でかい構造体の全てのフィールドにいちいち0だの'\0'だのを突っ込んでる奴はマゾ
27:デフォルトの名無しさん
07/10/25 21:25:46
ダメだ、我慢ができないw
>>19
無駄な関数呼び出しをして、処理速度を遅くしたい人ですね?
コンパイラの最適化で*p='\0';と同じコードを吐いてくれるようになるのかな??
28:デフォルトの名無しさん
07/10/25 21:29:24
>>13
> 過去に何度かfj.lang.cでも長大なスレッドになったことも有名。
fj.lang.cの時は、プロセス終了時にmallocで確保したメモリを開放しない(できない)OSもあるから、main()終了直前でもfreeしたほうがいい、って結論だった記憶が。
今でもwindowsだと信用ができない。
29:デフォルトの名無しさん
07/10/25 21:37:48
そんなOSあっていいの?w 特殊な環境?
30:デフォルトの名無しさん
07/10/25 21:49:26
>>28
fjで結論なんて出るわけないだろ。
31:デフォルトの名無しさん
07/10/25 22:31:57
>>27
いや、*p='\0';だと、馬鹿な奴が、*p="Init Strings";とかやってくれそうで...
32:デフォルトの名無しさん
07/10/26 00:15:42
char month[] = "Jan\0Feb\0Mar\0…Dec\0";
Decの後の\についてはスルーするとして、こういうのってどうよ
33:デフォルトの名無しさん
07/10/26 00:18:17
>>32
埋め込むなら、
char *month[] = {"Jan", "Feb", ・・・, "Dec"};
でいいじゃねえかと言いたくなります。
34:デフォルトの名無しさん
07/10/26 00:48:36
>>31
それ、後者はコンパイル通らないよ。
35:デフォルトの名無しさん
07/10/26 01:40:17
>>29
仮想記憶の無いOSもある
ex.DOS
ex.ITRON
アプリケーションが死ぬ時にOSも道連れなら別にかまわんが、違うだろう?
36:デフォルトの名無しさん
07/10/26 01:48:40
つーか最近の若いもんはそんなことも知らないんだな。
37:デフォルトの名無しさん
07/10/26 01:56:53
>>34
そういうばか者は、要らない工夫をするから怖いよ〜♪
しなくていい工夫はするのに、しなきゃいけない工夫をしないんだ...orz
38:デフォルトの名無しさん
07/10/26 02:01:32
>>37
コーディング規約でいくら縛っても縛っても、とんでもないコード書いてくるよな。
逆に言えば、コーディング規約でどうにかなる程度の問題なんて、初めからどうでも良い。
つまり、コーディングスタイルなんて、どうだっていいって事だな。
縛ろうと思えば、いつでも縛れるんだから。
39:デフォルトの名無しさん
07/10/26 02:17:01
>>38
>縛ろうと思えば、いつでも縛れるんだから。
いつでも縛れるからといっても、単体試験も終わろうかという時にコーディング規約を
変更するのは無しだろ、、、
40:デフォルトの名無しさん
07/10/26 02:17:06
だから、いくら人手不足とはいえ、使えないカスはプロジェクトから追い出したほうがいいんだよね。
41:デフォルトの名無しさん
07/10/26 02:29:11
>>39
そりゃ途中で変更は出来んだろうな。
だけど、コーディングスタイルは縛ろうと思えば縛れるんだから、全然いいんだよ。
むしろ問題は、どうやっても縛ることのできない、糞コードの方。
網の目をかいくぐるように余計なことをする。
42:デフォルトの名無しさん
07/10/26 02:54:10
strcpyで初期化すれば、NULL以外で初期化しなければならなくなったときに、最小限の変更で済むし
自分以外がその変更をする場合でも恐らく大丈夫だろうと思われる
*p = '\0';では、>>31みたいな変更をされた挙げ句、>>37な奴で、結果mallocした領域を駄目になって謎のエラーに悩むはめに...
猫の手を借りるためには、猫に理解できるコードを書かなければならない...orz
43:デフォルトの名無しさん
07/10/26 03:10:13
猫用マクロセットが必要だな
44:デフォルトの名無しさん
07/10/26 10:35:48
>>42
NULLと'\0'(NUL)は違うっていうのはわかってるよね?
いちよう。
45:デフォルトの名無しさん
07/10/26 10:36:48
コーディングスタイルにこだわらない奴は、下手
46:デフォルトの名無しさん
07/10/26 14:09:32
>>44
たぶん、判ってるよぅ(^-^;
NULLは、ナルっとしてて
NULは、ヌルっとしてるんだよね!
*p = '\0';にしてんじゃん...
判ってなきゃ、*p = NULL;にするし...
47:デフォルトの名無しさん
07/10/26 14:21:33
ひとりだけ、超絶低レベルな奴が紛れ込んでる
48:デフォルトの名無しさん
07/10/26 14:23:11
>>19
いくらなんでも、それは無い
49:デフォルトの名無しさん
07/10/26 14:24:03
ストリコンペ!
50:デフォルトの名無しさん
07/10/26 15:12:13
今来た。
もう終わったけど、if (定数 == 変数)の話がC FAQに載ってることに誰も言及しなかったのが不思議。
三田テンゲンは、C FAQから持ってきたか、comp.lang.cをwatchしてたかのどっちかじゃないかな。
51:デフォルトの名無しさん
07/10/26 15:14:27
こんなところで必死に10年前のネタ戦わせてる奴はもっと充実した趣味を探せといいたいね。
何もないならWiiFitでも買ってたるんだ腹でも引っ込めたらどうだw
52:デフォルトの名無しさん
07/10/26 15:19:05
if (定数 == 変数)はいろんな本に載ってるぞ
53:デフォルトの名無しさん
07/10/26 15:47:54
その本は買うべきじゃないという、良い指針になる
54:デフォルトの名無しさん
07/10/26 15:48:56
Wiiはありえない
55:デフォルトの名無しさん
07/10/26 15:49:06
良い本かどうかを見分けるのは実に簡単。
ASSERTの説明が入っているかどうか。
56:デフォルトの名無しさん
07/10/26 15:58:14
ASSERTの説明がなくても良い本はあるだろ、常考
57:デフォルトの名無しさん
07/10/26 16:01:21
代入防止に使うと言うのは、変数同士だと意味がなくなるので、==で比較する癖をつけることが望ましい
変数を何と比較しているのか判りやすくするってのは、当該関数の中で、その定数が比較対照になることは決まりきっているので、態々定数を先に持ってくる意味はない
当該関数で、比較に用いられる定数がなんなのか判りにくいのであれば、それは、関数が適切に作られてはいないことを意味するのでは無いだろうか?
また、どうしても定数を最初に出さなければ何を調べてるのか判らないような場合は、if文ではなく、switch文を使用する方が適切なのではないだろうか?
58:デフォルトの名無しさん
07/10/26 16:07:25
え、まだやる気?
59:デフォルトの名無しさん
07/10/26 16:09:10
まあ大盛況だからなww
60:デフォルトの名無しさん
07/10/26 16:22:45
>>57
だからクビになるんだよ
はやく次の仕事見つけろよ
61:デフォルトの名無しさん
07/10/26 16:36:06
>>60
自己紹介乙!
62:デフォルトの名無しさん
07/10/26 17:44:27
> 代入防止に使うと言うのは、変数同士だと意味がなくなるので、==で比較する癖をつけることが望ましい
これの意味がさっぱり分からない…。何の話をしようとしているのかさえ分からない。
63:デフォルトの名無しさん
07/10/26 18:03:48
代入防止ってのは if(a=1) とかの事だろ
ほんとは if(a==1) と判定したかった
でも if(1=a) こうすればコンパイル時に忘れてても分かる
ところが変数同士の比較 if(b=a) はどうしようも無い
というお話
64:デフォルトの名無しさん
07/10/26 18:08:23
(定数左にする癖をつけるよりは)==で比較する癖をつけることが望ましい
ってこと? し、しかし比較は癖も何も==なわけで。
> ところが変数同士の比較 if(b=a) はどうしようも無い
そんなのは既出どころかスタート地点であって、その上で、
「せめて定数の場合の代入だけは検出できるようにしよう」
ってのが定数左派の主張では?
いつも役に立つ、ではなくて、役に立つ場合があるから左に書く、と。
65:デフォルトの名無しさん
07/10/26 18:10:11
というより、
> ところが変数同士の比較 if(b=a) はどうしようも無い
これは、そもそも左も右もねぇ!
66:デフォルトの名無しさん
07/10/26 18:13:30
てかこのレヴェルのバグを防ぐのに四苦八苦してる奴って何やってる人?
67:デフォルトの名無しさん
07/10/26 18:35:13
左へ受け流す〜
68:デフォルトの名無しさん
07/10/26 19:51:18
左定数は、==を=と記述ミスした場合に検出できる利点あり。
右定数が左定数より優れている点って何?
69:デフォルトの名無しさん
07/10/26 19:52:16
operator のオーバライドが中途半端なときに死ねる
70:デフォルトの名無しさん
07/10/26 19:56:28
URLリンク(www.st.rim.or.jp)
71:デフォルトの名無しさん
07/10/26 20:01:38
>>68
警告でるから、その利点いらね。
72:デフォルトの名無しさん
07/10/26 20:11:59
google code search でググってみると.。
"== NULL" lang:c 約1,240,000件
"NULL == " lang:c 約56,800件
特に利点もないのに、圧倒的少数派のスタイルを選んでる時点でヘタクソ臭が。
73:デフォルトの名無しさん
07/10/26 20:21:45
>>50
C FAQに載っているけど、それは定数左置きにダメ出ししているってことを理解できてるか?
74:デフォルトの名無しさん
07/10/26 20:25:53
>>72
デブ専、ブス専、フケ専、ハゲ専なんかと同じ人種なんだろう。
自分の感覚が世間とずれていることを認めたがらない。
75:デフォルトの名無しさん
07/10/26 21:55:50
雀の涙ほどのどうでもいいメモリを節約するために
テンポラリ用の奇怪な共用体を使い回したりダミーデータの隙間を拝借したりするような奴にはどう言ってやればいいと思いますか
メモリ節約すること自体は大切だし
76:デフォルトの名無しさん
07/10/26 21:58:14
そんなしょぼい省メモリ化と可読性、開発効率とのトレードオフは成立しないといってやれ。
77:デフォルトの名無しさん
07/10/26 22:16:11
配列とかで大量にデータを取ったりしてるわけじゃなくて、タダの作業用のローカル変数とか
引数をshortにしてるコードとかもあるな。
よっぽど気をつけてコードを書かないと、すぐintへ変換するコードがはいるから、それで、節約した
2バイトなんて簡単にとぶ。
アライメントの問題もあるな。
78:デフォルトの名無しさん
07/10/26 22:16:18
いつも他人のコードを見ては『このコードだと遅い』とか文句つけるジジイと一緒だな
そのくせプロファイラの使い方すら判らないとか
79:デフォルトの名無しさん
07/10/26 22:39:36
入力がshortの範囲なら引数の型をshortにするのは普通じゃね?
数バイトでも節約したいとか実行速度がシビアだったりしなければ。
80:デフォルトの名無しさん
07/10/26 22:43:44
>>72
"== NULL"
"NULL =="
こんなの多数決で考える頭はもうちょっと働かせたほうがよい
if(変数 = NULL)
が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
難しい正規表現でも作る?`NULL'以外の場合もあるよ。
それより定数を左辺にもってくる方法を身につければいいだけじゃない?
自分がグループリーダーになったとき、部下のミスを見つけられるレベルになれる?
これはただの忠告。>>72はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
プログラミングの先生だって×は出さないだろうしなw
81:デフォルトの名無しさん
07/10/26 22:45:53
>>80
ええ? そのバグを防ぐ方法を知らないの?
こういう話のときには必ずでるのに。。。
基礎の基礎だよ。
82:デフォルトの名無しさん
07/10/26 22:49:59
>>80
そんなもんコードチェッカーにかければすぐ見つかるだろ。
まさかコードチェッカー使ってないのか?
83:デフォルトの名無しさん
07/10/26 22:50:11
Pythonを使えばよい
84:デフォルトの名無しさん
07/10/26 22:53:50
>>82
フツーに警告出ないようにコードを書いてるだけで防げるな。
警告出さないようなコンパイラはコードチェッカを使うか、捨てるべきか、悩むこところ。
85:デフォルトの名無しさん
07/10/26 22:57:32
>>80
> こんなの多数決で考える頭はもうちょっと働かせたほうがよい
コーディングスタイルなんて、よっぽどのセンスと見識があるやつ以外は、自分で考えたりしないで、
一般的なものに従うほうがいいよ。
(どうしてそういうスタイルになっているか、それ以外ではいけないか、考察したりするのは勉強になるけど)
86:デフォルトの名無しさん
07/10/26 22:59:39
てか、=と==を間違うや奴って、そんなに多いのか?
> これはただの忠告。>>80はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
> プログラミングの先生だって×は出さないだろうしなw
しかし、これは真実w
>>79
実行速度なら、shortよりintの方が有利のはず。
87:デフォルトの名無しさん
07/10/26 23:01:09
>>80
警告を無視する習慣があることはよく分かった
その悪習を直すほうがよっぽどいいよ
88:79
07/10/26 23:06:04
>>86
>実行速度なら、shortよりintの方が有利のはず。
だからそう書いてるだろ。よく嫁。
89:80
07/10/26 23:26:14
ごもっとも。ちなみに、コードチェッカー自体忘れてたよw
ちなみに、ウチ(60人ぐらいかな?)にはコードチェッカーを使う人は滅多にいない。
先人の知恵を借りれば、文字間違いのエラーぐらいしか出てこないし、そんなのはコンパイルエラーで出てくるから。
コードチェッカーに頼る前にコーディングスタイルに気を配る方がよっぽどよいよ。
その方が、コードレビューやバージョン管理に割く時間が増えるからね。
もっとも、バージョン管理はCVSで一瞬で済んでしまうが
90:80
07/10/26 23:28:40
>>87
は?警告は全部潰してますが。
どこを縦読みした?wwwww
91:デフォルトの名無しさん
07/10/26 23:29:00
> 数バイトでも節約したいとか実行速度がシビアだったりしなければ。
ん?
「数バイトでも節約したい」とか「実装速度がシビアだったりしなければ」{shortを使う}って読ませたいのか?
(「数バイトでも節約したい」とか「実装速度がシビアだったり」)「しなければ」{int}って読めるぞ。
人のことを言う前に、ちゃんとした分かりやすい日本語を書け。
設計書や資料を作るときの基本だろ?
92:デフォルトの名無しさん
07/10/26 23:30:17 BE:263040825-2BP(125)
gcc (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)で
#include <stdio.h>
int main(int argc, char *argv[]){
int a = 2;
if(a = 1)
printf("%s\n", argv[0]);
return 0;
}
というプログラムを-Wall付きでコンパイルしてみたら、
test.c:6: 警告: 真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします
という警告が出た。まあこれで何か起こってることはわかるだろう。
93:デフォルトの名無しさん
07/10/26 23:30:23
80はどこの社員だ?
そこだけには仕事は頼まないようにするから、教えてくれ。
94:デフォルトの名無しさん
07/10/26 23:31:00
制御文の代入で警告でないってどこのコンパイラ使ってるの?
95:デフォルトの名無しさん
07/10/26 23:32:41
>>89
アホなコンパイラ使ってるなら、せめてlintとか使えよ。
こわー。
96:デフォルトの名無しさん
07/10/26 23:33:07
「プログラミングの先生」とか言っちゃってる時点で、学生確定
97:79
07/10/26 23:38:15
>>91
・普通はshortを使う。
・数バイトでも節約したい場合は>>77のようにintを使った方がよい場合もある。
・実行速度がシビアならintを使った方がよい。
という意味のつもりで書いたが分かりにくかったか。
98:デフォルトの名無しさん
07/10/26 23:40:01
>>80
> が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
最悪、ホワイトボックスの分岐網羅カバレッジ100%のテスト段階で見つかるわけだが。
それより早く見つかったほうがコストが安いから、どうしようという話。
で、ちゃんとしたコンパイラかlint使えって結論。
99:80
07/10/26 23:41:10
>>92
何のデモか知らないけど、わざわざ-Wallで例示するなんてヒマなんだね。
>>93
いや、もう遅いかもしれんよwww
>>94
警告は全部潰してるよ。
そもそも、コーディングスタイルで蹴ってるからそんな警告があること自体知らなかった。
君ら無駄な努力払ってるね。
>>96
妄想強すぎ
100:デフォルトの名無しさん
07/10/26 23:41:24
>>89
コードチェッカの類を使ったことないだろ。
101:デフォルトの名無しさん
07/10/26 23:41:48
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ >>80
( \ / _ノ | |
.\ “ /__| |
\ /___ /
102:デフォルトの名無しさん
07/10/26 23:42:42
>>97
ループ変数に、いつもshort iとか書いてるのか?
いやすぎる。
103:デフォルトの名無しさん
07/10/26 23:44:57
>>99
> そもそも、コーディングスタイルで蹴ってるからそんな警告があること自体知らなかった。
どんだけ情報弱者なんだよ・・・
104:デフォルトの名無しさん
07/10/26 23:45:03
>>80 は Lattice C 使ってるとか?
105:79
07/10/26 23:46:50
>>102
>>79に引数って書いてるだろ
106:デフォルトの名無しさん
07/10/26 23:47:00
>>99
おまえの、定数を左にもってくるってのも、コーディングスタイルじゃなくて、コンパイラに頼って
バグを見つけるって発想だろ。 >>80
警告出るから、そんなことしなくていいってがコンセンサスになってるから >>72 みたいな結果になるわけよ。
107:デフォルトの名無しさん
07/10/26 23:49:29
if (定数 == 変数)と書くコーディングルールがある会社、ということで、技術力が低い会社だと
レッテルを貼られるリスクを考えたことがないようだ。
108:デフォルトの名無しさん
07/10/26 23:50:08
このスレにぴったりのネタ会社だ
109:80
07/10/26 23:54:01
>>100
コードチェッカーの類?最近は全くないね。
VC++6、VS2005、gcc3.4.4などまあ常識の範囲内のコンパイラ
最近はやむを得ずSDCC使ってるけど、エンバグすら直ぐ分かっちゃうのでlint通す意味ナシ。
110:デフォルトの名無しさん
07/10/26 23:54:52
>>79
普通じゃない
111:デフォルトの名無しさん
07/10/26 23:55:36
>>109
日本語でOK
112:デフォルトの名無しさん
07/10/26 23:57:28
>>80
if (0 = a)はコンパイラに任せるのに、その他の複雑なバグが簡単に見つかるコードチェッカーは使わないと?
わけわからん
113:デフォルトの名無しさん
07/10/26 23:59:10
>>109
コードチェッカの意義とか理解してないっぽいな。。。
114:デフォルトの名無しさん
07/10/26 23:59:26
言い訳するにしてももうちょっと熟考すればいいのに
115:デフォルトの名無しさん
07/10/27 00:00:09
>>80
なんか必死だけど、どれだけ言葉を重ねても、レベルが低いことを証明することになるだけだぞ。
116:デフォルトの名無しさん
07/10/27 00:00:35
>>107
ほう、そんなリスクがあっても引く手あまたのウチの会社って凄すぎるってこと?wwww
>>106
どういたしまして。負け犬の遠吠えと受け取っておきますm(_ _)m
117:デフォルトの名無しさん
07/10/27 00:01:29
>>112
コードチェッカが無意味なくらい完璧にコードを書けるなら、定数を左にもってくるとか、
姑息なテクニックを使わなくてもいいよな。
118:デフォルトの名無しさん
07/10/27 00:03:08
コードレビュー文化があって、コードチェッカーが使える環境なら、最初は使ってて
使わなくなるなんて考えられない。
ライセンスの関係で全員がコードチェッカーを使えないとしても、レビュアーがコードチェッカーを
使うことで、レビューの工数をかなり減らせる。なので、以前使ってて、使わなくなるなんてやはり考えられない。
つまり、部下のミスを見つけてなんかいないってこった。
あ、部下がいないという線もあるな。
119:デフォルトの名無しさん
07/10/27 00:04:48
タコなコードチェッカーだったからうざくて使うのやめたってならわからなくもない
120:デフォルトの名無しさん
07/10/27 00:05:35
コードレビューなんてしてないんだろ
121:デフォルトの名無しさん
07/10/27 00:06:44
このスレで>>80が頑張る意味がわからない
122:デフォルトの名無しさん
07/10/27 00:07:03
右定数を見つけると最高レベルの警告を出す80謹製コードチェッカだったら使わなくなるかもしれない
123:デフォルトの名無しさん
07/10/27 00:07:24
コンパイラがどういうときに警告出すかとか知らないってのもどうかなぁ。
コーディングルールを守ってるから、警告でなくて知らないって話だけど、
そういうのは教条的に守るんじゃなくて、どうしてそうなってるかとか考えたほうがいいよ。
124:デフォルトの名無しさん
07/10/27 00:09:43
>>121
自分がレベル低いなんて夢にも思ってなかったから、現実を突きつけられて自我の危機に陥ってる。
125:デフォルトの名無しさん
07/10/27 00:12:01
定数が左ってのは、警告を出してくれるコンパイラやまともなコードチェッカーが無かった時代の名残だよな。
今ではまるで意味が無い。
126:デフォルトの名無しさん
07/10/27 00:12:16
if (定数 == 変数)なんて、いわゆる「バカよけのテクニック」だからね。
それを使っているからといって、声高に自慢するようなことではない。
127:デフォルトの名無しさん
07/10/27 00:13:59
前スレだかで馬鹿にしすぎたからムキになっちゃったんだろ。
お前ら自重しろ。
128:デフォルトの名無しさん
07/10/27 00:14:08
袋叩きwww
129:デフォルトの名無しさん
07/10/27 00:15:42
80は、左に置きたいから置いているようにしか思えない。
コンパイルエラーになることを理由にしているようだが、
それは右に置いてもコンパイラの警告が出るので互角(散々既出)。
となると、ほかに理由を提示しない今、残る理由は各人の好み。
そこで80は左を選択したということだろう。
130:デフォルトの名無しさん
07/10/27 00:19:37
>>123
・この警告は出るのが当たり前、気にするな
・この警告は出てもいいけど本当に大丈夫かチェック汁
・この警告出したバカは氏ね
みたいに警告のランク分けとかするよね。
131:デフォルトの名無しさん
07/10/27 00:20:02
単に後に引けなくなってるだけだろ。
132:デフォルトの名無しさん
07/10/27 00:23:50
>>129
> それは右に置いてもコンパイラの警告が出るので互角(散々既出)。
単にこれを知らないだけだと思うよ。
133:デフォルトの名無しさん
07/10/27 00:24:11
私はコードチェッカというものをいままで使ったことがありません
そんなに有効なものですか?
有名なものではどんなものがありますか?
134:デフォルトの名無しさん
07/10/27 00:27:49
OSと言語は?
135:デフォルトの名無しさん
07/10/27 00:30:19
>>133
URLリンク(www.swtest.jp)
静的解析ツールでぐぐれ
136:デフォルトの名無しさん
07/10/27 00:32:31
べつに必要としているわけではなくてどのようなものか知りたいので
何でもいいですが、自分の普段の仕事ではWindowsでC++です
Cygwinも常用しているのでUNIX系でも試せると思います
137:デフォルトの名無しさん
07/10/27 00:36:39
どんなものか知りたいなら、Cygwinでcheckをインストールして、Cで怪しげなコードを書いてチェックしてみろ。
138:デフォルトの名無しさん
07/10/27 00:37:42
間違えた。checkじゃなくて、splintだ。
139:デフォルトの名無しさん
07/10/27 00:41:10
WindowsのC++なら、ここから体験版をゲットするんだ。
URLリンク(www.techmatrix.co.jp)
140:デフォルトの名無しさん
07/10/27 00:41:52
ぱっと見て「ばかだなぁ」という奴を相手にしなくていいから、
「ヘタだなぁ」と思うコードを貼ってくれ。
141:133
07/10/27 00:42:06
>>135
あ、QACとかのことですか
使ったことはないけどプレゼンは受けたことがあります
そのときは、馬鹿に使わせるのは怖いツールだなと思いました
142:デフォルトの名無しさん
07/10/27 00:43:28
C++用のフリーな静的解析ツールは知らないなぁ・・・
143:デフォルトの名無しさん
07/10/27 00:44:18
ほれ。爆弾投下!
test.cpp
if (a = 0) printf("x");
D:>bcc32 test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
警告 W8060 test.cpp 7: おそらく不正な代入(関数 main() )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
>>80
わざわざひねくれて if (0 == a) としなくても、ちゃんと警告出してくれるから。
ミスを防ぐため、というのは全然理由にならない。
「定数は左」って書き方って、15年以上も前に「Cマガジン」って雑誌が流行らせたんだよね。
当時の古いコンパイラは上のような警告は出していなかったかもしれない。
でも今は無料のタダのコンパイラでさえ警告出すようになって、「定数左」は意味の無いものになった。
15年も前に決着が付いて廃れたことを、いまだに「神の福音」のように信じ込んでいるヤツがいるんだな。
おまいは隠れキリシタンかw
144:デフォルトの名無しさん
07/10/27 00:47:00
釣られるなよおまいら……。単に自作自演なのかもしれんが。
ところで、見てくれ、このコード。(実物はJavaで、本質的な部分だけ抜粋してるのだが)
おまいら、レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?
void hoge(int a, int b) {
bool result = false;
for (int i = 0; i < 3; i++) {
if (a == b - i) {
result = true;
break;
}
}
if (result == true) {
cout << "OK\n";
} else {
cout << "NG\n";
}
}
145:デフォルトの名無しさん
07/10/27 00:47:21
長文お疲れだけど、それみんなもう知ってるから・・・
146:デフォルトの名無しさん
07/10/27 00:55:08
>>116
うん、君の会社が凄すぎるから、下民たちの為に会社名を教えてくれ。
> 警告は全部潰してるよ。
コンパイラの設定を変更して、特定の警告は表示させないようにしたのか?
147:デフォルトの名無しさん
07/10/27 00:56:08
「みんな」 に 80 は含まれていないが。
148:デフォルトの名無しさん
07/10/27 01:00:53
>>144
何を問題にしているのか分からないけど。
if (result == true)を気にしているのだとしたら、全員にメールでも出したら?
一番いいのは、タコなコードを書く奴は、片っ端からプロジェクト外に追放することなんだけど。
それをやったら、誰も残らなかったなんてのが笑い話じゃなくなるからな。
149:デフォルトの名無しさん
07/10/27 01:02:49
>>144
b-a が0〜2ならOK,それ以外ならNGを出力ってこと?
不等号演算子とか教えるといいんじゃないかな。
150:デフォルトの名無しさん
07/10/27 01:05:15
どうしようもなく汚いコードのところで仕事をしたとき、警告がでまくったけど、
ま、こんなもんかと思って、放置しておいたら、上のヒトの目にとまって、
警告が出てるじゃないかと注意されてしまった。
で、警告の原因を調べたら、そのコードを動かす環境にインストールされてる、その部署の
ライブラリがバージョン古くて、プロトタイプが、K&R方式になってやんの。
仕方ないので、makefileを書き換えて、警告を全部抑制した。
151:デフォルトの名無しさん
07/10/27 01:05:37
つまり
if (b - a < 3)
OK;
ということでしょ
境界の辺が自信ないが
152:デフォルトの名無しさん
07/10/27 01:19:53
>>151
b<aだとダメじゃね?
153:デフォルトの名無しさん
07/10/27 01:20:11
プロトタイプ宣言はK&Rにはできないんじゃないだろうか
154:デフォルトの名無しさん
07/10/27 01:22:32
それは当然 else 節を省略したのですけど
そういうことではない?
酒が入ってるので不安
155:デフォルトの名無しさん
07/10/27 01:26:07
>>153
ああ、そうだっけ。
int hoge();
みたいに、戻り値だけで、引数のないプロトタイプだった。
156:デフォルトの名無しさん
07/10/27 01:31:26
それは多分C言語的には完全に合法なので警告のほうがうざいと思う
先に宣言が
int f();
とあって後で定義が
int f(int a) { ... }
とANSIならばエラーエラーかな?
うろ覚えでごめん
157:デフォルトの名無しさん
07/10/27 01:33:18
>>80の所属している会社を大胆予想。
仕事は来ていて技術力は無いという辺りから、
・富士通
・日立
・NEC
の関連会社を予想。
しかし、仕事を大量に受けているという記述から想像するに、
・人材派遣会社
に所属しているのではないだろうか。
こう考えると、技術力が無いのにそれに気が付かない理由も説明できると思う。
#JAVAのswingで画面を作っているんだけど、クラス図もイベントトレース図も存在しないって、此の先木大丈夫なんだろうか。
158:デフォルトの名無しさん
07/10/27 01:39:31
> 80 名前: デフォルトの名無しさん [sage] 投稿日: 2007/10/26(金) 22:43:44
から3時間足らずで約70レスか。
このペースで行けば、39時間かからずに埋め立て完了か。
今までの過疎化が嘘のようだなw
159:デフォルトの名無しさん
07/10/27 01:41:01
>>148
レビューしてすら、さくっとスルーされそうなことはわかりますた。
>>149
yes. 問題は、コレと同レベルのコードがと某社のおひさるなサイト上で動いてたってことなんだ。
さらに恐しいことは、a, bは日付を8桁の整数に変換したものだったりしたんだ……。
>>154
条件式が足りてないれす。こんな感じ?
int d = b - a; if (0 <= d && d < 3) ...
160:デフォルトの名無しさん
07/10/27 01:47:51
というか、何をしたいコードなのか教えてくれないと、144のコードが正しいか間違っているかは判断できないぞ。
161:デフォルトの名無しさん
07/10/27 01:50:10
正しいか間違ってるかの問題じゃなく
冗長すぎるのを問題にしていると思う
162:144
07/10/27 01:59:48
>>159
あ、「日付を8桁の整数に」ってのは、20071027みたいなやつ(YYYYMMDD)のことね。為念。
163:デフォルトの名無しさん
07/10/27 02:02:36
冗長かどうかも、何がやりたいのかが分からないと、何とも判断できないからね。
問題によっては、冗長に見えるやり方が最適解になったりすることもあるし。
164:デフォルトの名無しさん
07/10/27 02:05:19
でもあれはさすがに型も明示されてるし言い逃れようがないでしょ
165:144
07/10/27 02:11:50
>>161
です。冗長過ぎるというより、きっぱりはっきり無駄かつ無意味。
>>160>>163
一般論としてクソコードであると賛同を得られないことに絶望した。
つか、釣りか? 釣りなのか?
166:デフォルトの名無しさん
07/10/27 02:18:21
>>165
このスレになじまない内容なので、あまり興味を持たれなかっただけかと
167:デフォルトの名無しさん
07/10/27 02:18:22
お前が釣ろうとしてるのかと深読みしてしまったよ
168:デフォルトの名無しさん
07/10/27 02:24:40
>>144はこのスレで希に見る良題だと思ったけど
あぁ、希だからか
ちなみに自分は144ではないです
169:149
07/10/27 02:29:03
>>165
俺は賛同するぞ。
簡単な処理をあんなに難しく実装する才能はある意味凄いと思う。
170:デフォルトの名無しさん
07/10/27 02:32:58
if (cond) for (;;) {
} else {
}
とか
for (;;)
if (cond1)
if (cond2)
{
}
ってありなの?
171:デフォルトの名無しさん
07/10/27 02:34:06
>レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?
これは質問じゃなくてただの皮肉だったのか
172:デフォルトの名無しさん
07/10/27 02:34:05
つーか、条件式の定数を左に書くのは、代入文の検出とかいってる奴なんなの?
レベル低すぎてどうしようもない。ちげーだろ。
if( NULL == hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) )
{
}
if( hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) == NULL )
{
}
前者と後者、どっちが読みやすいかって話だ。
そもそも関数の引数が多すぎる、とか言われても困るぞ。
Win32APIとかだと、引数8個程度のなんてゴロゴロあるからな。
あと、後者だと、環境によっては==NULLがエディタの外に出てしまって、見えないことがあることも付け加えておく。
173:デフォルトの名無しさん
07/10/27 02:39:46
>>172
関数より定数の方が長い場合もあるわけで
174:デフォルトの名無しさん
07/10/27 02:41:33
>>170
文法的には間違っては無さそうだが、ひどく読みづらいな。
175:デフォルトの名無しさん
07/10/27 02:41:49
>>173
その場合は定数を後ろに書けば良いだろ。
176:デフォルトの名無しさん
07/10/27 02:43:44
>>172の言いたいことがケースバイケースであるなら正解
定数左が当然といってるのなら>>173が正解
177:デフォルトの名無しさん
07/10/27 02:50:31
ったくもう、まだ続ける気かよ。
>>172
こういう発想は無いの?
if( hoge_func(hoge_arg1
, hoge_arg2
, hoge_arg3
, hoge_arg4
, hoge_arg5
, hoge_arg6
, hoge_arg7
, hoge_arg8) == NULL )
{
}
178:デフォルトの名無しさん
07/10/27 02:51:18
だいたいさ、お前ら良く考えてみろよ。
疲労困憊のときに>>172の後者の文を見て、本当に==NULLを読み飛ばさない自信が有るか?
==NULLはエディタの外に出てしまっていて見えてないかもしれないんだぞ。
必ずスクロールして確かめる自身はあるか?
また、他人が読んだとき、必ずスクロールしてくれる自身はあるか?
そんなリスク背負うぐらいなら、場合によっては定数を先に書いても良いんじゃないか?
コーディングスタイルに拘るあまり、意固地になっちゃってどうするの。
179:デフォルトの名無しさん
07/10/27 02:57:03
つか、Win32APIを使ってる時点で、何と比較するのか判っているのだから、定数が左にある必要は無いと思うが?
CreateWindowを使った後にHWNDを定数と比較する
その定数は何かなんて、誰だって判る問題だ
ファイルポインタを定数と比較する
その定数はなんなのか判らない奴は、Cで真面にプログラム組む事が出来るとは思えない
変な定数と比較するのなら、定数を前に持っていくより、何のためのテストかコメントを残す方が余っ程気が利いている
180:デフォルトの名無しさん
07/10/27 02:59:16
>>177
どこで折り返すかって話になるが、
結局、自分のプログラムが何処で誰に読まれるか判らない以上、
「何列以上になったら折り返す」ということを語るのは難しい。
読み手のエディタのサイズを予測するすべは無い。
それに、どの様な書き方をしても、後に書くものは先に書くものに比べて
目立ちにくいということには変わりない。
条件式の場合は、関数の引数よりも条件そのものの方が大事だから、
大事なものを先に書いちゃおうという視点から、読み手のことを考えれば、
定数は自然と左に出てくる。逆に自分のスタイルを貫けば右に行く。
181:デフォルトの名無しさん
07/10/27 03:02:31
>>179
なんでWin32API限定で話を進めるんだよ。
>>172のどこにもWin32APIに限定しますなんて書いてないだろ。
離散数学の基礎からやり直してください。
182:デフォルトの名無しさん
07/10/27 03:02:42
いや、昔は80桁越えたら折り返すってルールがあったんだが。
マウスの付いてるパソコンしか使ったことの無い世代が増えたなぁ。
・・・しみじみ。
183:デフォルトの名無しさん
07/10/27 03:04:58
>>182
今の人だけど、常識としてちゃんと知ってるよ。受け継がれてるから安心して。
184:デフォルトの名無しさん
07/10/27 03:09:37
それを強制したら老害だけどね
185:デフォルトの名無しさん
07/10/27 03:10:42
>>181
別にWin32API限定でなくても、定数を比べる場合はif文以前に比べる定数は決まってるだろう
自分で作った関数だろうと、人の作った関数だろうと、定数で比較する時点で、どんな定数と比較するのか決まっているじゃないか
186:デフォルトの名無しさん
07/10/27 03:17:30
そもそもさ、条件式の定数を右に書くか左に書くか、必ずどっちかに統一しろって言ってる人達は何なの?
繰り返し文は、かならずfor文で書くべきで、whileとかdo-whileを使うなとか言うのか?
(俺は繰り返し文は全部forで書くがな)
分岐は必ずifで行うべきで、switchは使うなとか言うのか?
(俺はswtich文嫌いだがな)
gotoだって、使うなといわれてはいるけど、例外処理に使うのならなんら問題ない。
どうして、場合場合によって使い分けようとしないの?
187:デフォルトの名無しさん
07/10/27 03:22:49
>>172
「普通の感性を持っている人」は、そういう場合は次のようなコードを書くから、なんら心配することはありません。
void *p = hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8);
if (p == NULL) {
}
理解できましたか?
188:デフォルトの名無しさん
07/10/27 03:25:32
>>185
全ての関数の仕様が頭に入ってる人なんて居ない。
他人の使っている関数の仕様まで全部事細かに覚えてる人なんて居ない。
比べる定数は決まっているが、それはあくまで仕様上での話。
今、バグを防ぎたいと考えているのだから、全てのプログラマが仕様を完全に網羅しているとは
考えるべきではない。そういう甘い考えがバグを生む。
それから、プログラマの集中力の問題もある。
先に書いたものの方が、高い集中力を持って読んでもらえる可能性が高い。
だから、条件式の条件は成るべく先に持っていったほうが良いだろう。
長い長い関数呼び出し部を読み終わったころには、集中力がなくなっているかもしれないから。
189:デフォルトの名無しさん
07/10/27 03:27:31
>>144
おまえ自身が
> 本質的な部分だけ抜粋してるのだが
と言っているんだよな。
本来のコードだと
for (int i = 0; i < 3; i++) {
}
の中で重要な処理をしているかもしれない。
144は本質じゃないと切り捨てたかもしれないけど、その判断が間違っている可能性は高いわけだ。
だから、何をしようとしたコードなのか分からないと、冗長かどうかの判断は出来ないといっているのだが。
ここまで丁寧に説明してあげれば、144も自分のおろかさを理解してくれるかな?
190:デフォルトの名無しさん
07/10/27 03:28:23
>>187
そう書くのが一番良いんだけど、書かない奴も居るだろ。
191:デフォルトの名無しさん
07/10/27 03:32:51
とは言ったものの、わざわざ
int ret = strcmp(str1, str2);
if(ret == 0){}
なんて書く奴がどれだけ居るのか気になるが。
192:デフォルトの名無しさん
07/10/27 03:35:07
>>191
その程度なら、
if (!strcmp(str1, str2)) {}
と書くのが一番分かりやすいから。
193:デフォルトの名無しさん
07/10/27 03:40:29
>>192
つまり「程度」によるわけだよな。
だから、程度によっては定数を左に持ってきても良いだろ。
それから、
if (!strcmp(str1, str2)) {}
が許されるなら、
if (0==strcmp(str1, str2)) {}
も許されるだろ。
if ( strcmp(str1, str2) ! ) {}
と、後ろに「!」は書かないからな。
後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
考える人も多いだろう。
194:デフォルトの名無しさん
07/10/27 03:42:30
>>178
NULLとの比較は読み飛ばしにくくなるかもしれんが
hoge_arg8を読み飛ばす可能性はかなり大きくなるだろ?
引数8つもある関数を直接ifに入れるって事は
文脈上ifよりも関数呼び出し自体が重要って事だろ
それなら、エラー処理系であろうifの条件よりも
hoge_arg8が見えやすいほうが良くないか?
195:デフォルトの名無しさん
07/10/27 03:43:07
あとさ、定数左禁止派はさ、do-whileはどうなのよ。あれは良いのか?
あっちのが色物に思えるが。
196:デフォルトの名無しさん
07/10/27 03:43:16
つか、無闇矢鱈と左に定数を置きたがる奴は、出してくる例題を間違えとる
if ((LOW_AGE < age) && (age <= HI_AGE)) {}
こういう場合は、定数が左にあることに対して意味があるが
if (NULL == pointer) {}
この場合は、定数が左にあることの意味は無い
しいて言うならば、コードを何れだけ見づらくできるか位の意味はあるかもしれない
(我々は、NULLがポインタなのかを知りたいのではなく、ポインタがNULLであるのかを知りたいのだから)
197:デフォルトの名無しさん
07/10/27 03:50:28
>>193
そもそもstrcmpって定数が右を想定した作りだと思う
if (0<strcmp(str1, str2)) {}
どっちが大きい時ifの中に入るかすぐわかるか?
198:デフォルトの名無しさん
07/10/27 03:50:48
>>193
C FAQより
----------
17.3:
ほら、このわざを見て。
if(!strcmp(s1, s2))
これはよい書き方?
とくによい書き方ということはない。ただし人気のある書き方ではある。このテストは、二つの文字列が同じときに成功する。しかしこの 形は等しくないことをテストしているようにみえる。
より優れた選択肢としては以下のようなマクロを使うことがある。
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
コーディングスタイルに関する考え方は、宗教に関する考え方と同じ で、議論に終りがない。よい書き方は価値ある目標であるし、たいて いは見ればよいか悪いかわかるが、文章にすることはできない。質問 17.10も参照のこと。
----------
どこにもif (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいとは書いてありませんが?
より良い書き方としてあげている例も、
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
と、定数は右側に来ていますよ。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5372日前に更新/89 KB
担当:undef