ぱっと見て「ヘタだな ..
116:デフォルトの名無しさん
07/10/27 00:00:35
>>107
ほう、そんなリスクがあっても引く手あまたのウチの会社って凄すぎるってこと?wwww
>>106
どういたしまして。負け犬の遠吠えと受け取っておきますm(_ _)m
117:デフォルトの名無しさん
07/10/27 00:01:29
>>112
コードチェッカが無意味なくらい完璧にコードを書けるなら、定数を左にもってくるとか、
姑息なテクニックを使わなくてもいいよな。
118:デフォルトの名無しさん
07/10/27 00:03:08
コードレビュー文化があって、コードチェッカーが使える環境なら、最初は使ってて
使わなくなるなんて考えられない。
ライセンスの関係で全員がコードチェッカーを使えないとしても、レビュアーがコードチェッカーを
使うことで、レビューの工数をかなり減らせる。なので、以前使ってて、使わなくなるなんてやはり考えられない。
つまり、部下のミスを見つけてなんかいないってこった。
あ、部下がいないという線もあるな。
119:デフォルトの名無しさん
07/10/27 00:04:48
タコなコードチェッカーだったからうざくて使うのやめたってならわからなくもない
120:デフォルトの名無しさん
07/10/27 00:05:35
コードレビューなんてしてないんだろ
121:デフォルトの名無しさん
07/10/27 00:06:44
このスレで>>80が頑張る意味がわからない
122:デフォルトの名無しさん
07/10/27 00:07:03
右定数を見つけると最高レベルの警告を出す80謹製コードチェッカだったら使わなくなるかもしれない
123:デフォルトの名無しさん
07/10/27 00:07:24
コンパイラがどういうときに警告出すかとか知らないってのもどうかなぁ。
コーディングルールを守ってるから、警告でなくて知らないって話だけど、
そういうのは教条的に守るんじゃなくて、どうしてそうなってるかとか考えたほうがいいよ。
124:デフォルトの名無しさん
07/10/27 00:09:43
>>121
自分がレベル低いなんて夢にも思ってなかったから、現実を突きつけられて自我の危機に陥ってる。
125:デフォルトの名無しさん
07/10/27 00:12:01
定数が左ってのは、警告を出してくれるコンパイラやまともなコードチェッカーが無かった時代の名残だよな。
今ではまるで意味が無い。
126:デフォルトの名無しさん
07/10/27 00:12:16
if (定数 == 変数)なんて、いわゆる「バカよけのテクニック」だからね。
それを使っているからといって、声高に自慢するようなことではない。
127:デフォルトの名無しさん
07/10/27 00:13:59
前スレだかで馬鹿にしすぎたからムキになっちゃったんだろ。
お前ら自重しろ。
128:デフォルトの名無しさん
07/10/27 00:14:08
袋叩きwww
129:デフォルトの名無しさん
07/10/27 00:15:42
80は、左に置きたいから置いているようにしか思えない。
コンパイルエラーになることを理由にしているようだが、
それは右に置いてもコンパイラの警告が出るので互角(散々既出)。
となると、ほかに理由を提示しない今、残る理由は各人の好み。
そこで80は左を選択したということだろう。
130:デフォルトの名無しさん
07/10/27 00:19:37
>>123
・この警告は出るのが当たり前、気にするな
・この警告は出てもいいけど本当に大丈夫かチェック汁
・この警告出したバカは氏ね
みたいに警告のランク分けとかするよね。
131:デフォルトの名無しさん
07/10/27 00:20:02
単に後に引けなくなってるだけだろ。
132:デフォルトの名無しさん
07/10/27 00:23:50
>>129
> それは右に置いてもコンパイラの警告が出るので互角(散々既出)。
単にこれを知らないだけだと思うよ。
133:デフォルトの名無しさん
07/10/27 00:24:11
私はコードチェッカというものをいままで使ったことがありません
そんなに有効なものですか?
有名なものではどんなものがありますか?
134:デフォルトの名無しさん
07/10/27 00:27:49
OSと言語は?
135:デフォルトの名無しさん
07/10/27 00:30:19
>>133
URLリンク(www.swtest.jp)
静的解析ツールでぐぐれ
136:デフォルトの名無しさん
07/10/27 00:32:31
べつに必要としているわけではなくてどのようなものか知りたいので
何でもいいですが、自分の普段の仕事ではWindowsでC++です
Cygwinも常用しているのでUNIX系でも試せると思います
137:デフォルトの名無しさん
07/10/27 00:36:39
どんなものか知りたいなら、Cygwinでcheckをインストールして、Cで怪しげなコードを書いてチェックしてみろ。
138:デフォルトの名無しさん
07/10/27 00:37:42
間違えた。checkじゃなくて、splintだ。
139:デフォルトの名無しさん
07/10/27 00:41:10
WindowsのC++なら、ここから体験版をゲットするんだ。
URLリンク(www.techmatrix.co.jp)
140:デフォルトの名無しさん
07/10/27 00:41:52
ぱっと見て「ばかだなぁ」という奴を相手にしなくていいから、
「ヘタだなぁ」と思うコードを貼ってくれ。
141:133
07/10/27 00:42:06
>>135
あ、QACとかのことですか
使ったことはないけどプレゼンは受けたことがあります
そのときは、馬鹿に使わせるのは怖いツールだなと思いました
142:デフォルトの名無しさん
07/10/27 00:43:28
C++用のフリーな静的解析ツールは知らないなぁ・・・
143:デフォルトの名無しさん
07/10/27 00:44:18
ほれ。爆弾投下!
test.cpp
if (a = 0) printf("x");
D:>bcc32 test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
警告 W8060 test.cpp 7: おそらく不正な代入(関数 main() )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
>>80
わざわざひねくれて if (0 == a) としなくても、ちゃんと警告出してくれるから。
ミスを防ぐため、というのは全然理由にならない。
「定数は左」って書き方って、15年以上も前に「Cマガジン」って雑誌が流行らせたんだよね。
当時の古いコンパイラは上のような警告は出していなかったかもしれない。
でも今は無料のタダのコンパイラでさえ警告出すようになって、「定数左」は意味の無いものになった。
15年も前に決着が付いて廃れたことを、いまだに「神の福音」のように信じ込んでいるヤツがいるんだな。
おまいは隠れキリシタンかw
144:デフォルトの名無しさん
07/10/27 00:47:00
釣られるなよおまいら……。単に自作自演なのかもしれんが。
ところで、見てくれ、このコード。(実物はJavaで、本質的な部分だけ抜粋してるのだが)
おまいら、レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?
void hoge(int a, int b) {
bool result = false;
for (int i = 0; i < 3; i++) {
if (a == b - i) {
result = true;
break;
}
}
if (result == true) {
cout << "OK\n";
} else {
cout << "NG\n";
}
}
145:デフォルトの名無しさん
07/10/27 00:47:21
長文お疲れだけど、それみんなもう知ってるから・・・
146:デフォルトの名無しさん
07/10/27 00:55:08
>>116
うん、君の会社が凄すぎるから、下民たちの為に会社名を教えてくれ。
> 警告は全部潰してるよ。
コンパイラの設定を変更して、特定の警告は表示させないようにしたのか?
147:デフォルトの名無しさん
07/10/27 00:56:08
「みんな」 に 80 は含まれていないが。
148:デフォルトの名無しさん
07/10/27 01:00:53
>>144
何を問題にしているのか分からないけど。
if (result == true)を気にしているのだとしたら、全員にメールでも出したら?
一番いいのは、タコなコードを書く奴は、片っ端からプロジェクト外に追放することなんだけど。
それをやったら、誰も残らなかったなんてのが笑い話じゃなくなるからな。
149:デフォルトの名無しさん
07/10/27 01:02:49
>>144
b-a が0〜2ならOK,それ以外ならNGを出力ってこと?
不等号演算子とか教えるといいんじゃないかな。
150:デフォルトの名無しさん
07/10/27 01:05:15
どうしようもなく汚いコードのところで仕事をしたとき、警告がでまくったけど、
ま、こんなもんかと思って、放置しておいたら、上のヒトの目にとまって、
警告が出てるじゃないかと注意されてしまった。
で、警告の原因を調べたら、そのコードを動かす環境にインストールされてる、その部署の
ライブラリがバージョン古くて、プロトタイプが、K&R方式になってやんの。
仕方ないので、makefileを書き換えて、警告を全部抑制した。
151:デフォルトの名無しさん
07/10/27 01:05:37
つまり
if (b - a < 3)
OK;
ということでしょ
境界の辺が自信ないが
152:デフォルトの名無しさん
07/10/27 01:19:53
>>151
b<aだとダメじゃね?
153:デフォルトの名無しさん
07/10/27 01:20:11
プロトタイプ宣言はK&Rにはできないんじゃないだろうか
154:デフォルトの名無しさん
07/10/27 01:22:32
それは当然 else 節を省略したのですけど
そういうことではない?
酒が入ってるので不安
155:デフォルトの名無しさん
07/10/27 01:26:07
>>153
ああ、そうだっけ。
int hoge();
みたいに、戻り値だけで、引数のないプロトタイプだった。
156:デフォルトの名無しさん
07/10/27 01:31:26
それは多分C言語的には完全に合法なので警告のほうがうざいと思う
先に宣言が
int f();
とあって後で定義が
int f(int a) { ... }
とANSIならばエラーエラーかな?
うろ覚えでごめん
157:デフォルトの名無しさん
07/10/27 01:33:18
>>80の所属している会社を大胆予想。
仕事は来ていて技術力は無いという辺りから、
・富士通
・日立
・NEC
の関連会社を予想。
しかし、仕事を大量に受けているという記述から想像するに、
・人材派遣会社
に所属しているのではないだろうか。
こう考えると、技術力が無いのにそれに気が付かない理由も説明できると思う。
#JAVAのswingで画面を作っているんだけど、クラス図もイベントトレース図も存在しないって、此の先木大丈夫なんだろうか。
158:デフォルトの名無しさん
07/10/27 01:39:31
> 80 名前: デフォルトの名無しさん [sage] 投稿日: 2007/10/26(金) 22:43:44
から3時間足らずで約70レスか。
このペースで行けば、39時間かからずに埋め立て完了か。
今までの過疎化が嘘のようだなw
159:デフォルトの名無しさん
07/10/27 01:41:01
>>148
レビューしてすら、さくっとスルーされそうなことはわかりますた。
>>149
yes. 問題は、コレと同レベルのコードがと某社のおひさるなサイト上で動いてたってことなんだ。
さらに恐しいことは、a, bは日付を8桁の整数に変換したものだったりしたんだ……。
>>154
条件式が足りてないれす。こんな感じ?
int d = b - a; if (0 <= d && d < 3) ...
160:デフォルトの名無しさん
07/10/27 01:47:51
というか、何をしたいコードなのか教えてくれないと、144のコードが正しいか間違っているかは判断できないぞ。
161:デフォルトの名無しさん
07/10/27 01:50:10
正しいか間違ってるかの問題じゃなく
冗長すぎるのを問題にしていると思う
162:144
07/10/27 01:59:48
>>159
あ、「日付を8桁の整数に」ってのは、20071027みたいなやつ(YYYYMMDD)のことね。為念。
163:デフォルトの名無しさん
07/10/27 02:02:36
冗長かどうかも、何がやりたいのかが分からないと、何とも判断できないからね。
問題によっては、冗長に見えるやり方が最適解になったりすることもあるし。
164:デフォルトの名無しさん
07/10/27 02:05:19
でもあれはさすがに型も明示されてるし言い逃れようがないでしょ
165:144
07/10/27 02:11:50
>>161
です。冗長過ぎるというより、きっぱりはっきり無駄かつ無意味。
>>160>>163
一般論としてクソコードであると賛同を得られないことに絶望した。
つか、釣りか? 釣りなのか?
166:デフォルトの名無しさん
07/10/27 02:18:21
>>165
このスレになじまない内容なので、あまり興味を持たれなかっただけかと
167:デフォルトの名無しさん
07/10/27 02:18:22
お前が釣ろうとしてるのかと深読みしてしまったよ
168:デフォルトの名無しさん
07/10/27 02:24:40
>>144はこのスレで希に見る良題だと思ったけど
あぁ、希だからか
ちなみに自分は144ではないです
169:149
07/10/27 02:29:03
>>165
俺は賛同するぞ。
簡単な処理をあんなに難しく実装する才能はある意味凄いと思う。
170:デフォルトの名無しさん
07/10/27 02:32:58
if (cond) for (;;) {
} else {
}
とか
for (;;)
if (cond1)
if (cond2)
{
}
ってありなの?
171:デフォルトの名無しさん
07/10/27 02:34:06
>レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか?
これは質問じゃなくてただの皮肉だったのか
172:デフォルトの名無しさん
07/10/27 02:34:05
つーか、条件式の定数を左に書くのは、代入文の検出とかいってる奴なんなの?
レベル低すぎてどうしようもない。ちげーだろ。
if( NULL == hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) )
{
}
if( hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) == NULL )
{
}
前者と後者、どっちが読みやすいかって話だ。
そもそも関数の引数が多すぎる、とか言われても困るぞ。
Win32APIとかだと、引数8個程度のなんてゴロゴロあるからな。
あと、後者だと、環境によっては==NULLがエディタの外に出てしまって、見えないことがあることも付け加えておく。
173:デフォルトの名無しさん
07/10/27 02:39:46
>>172
関数より定数の方が長い場合もあるわけで
174:デフォルトの名無しさん
07/10/27 02:41:33
>>170
文法的には間違っては無さそうだが、ひどく読みづらいな。
175:デフォルトの名無しさん
07/10/27 02:41:49
>>173
その場合は定数を後ろに書けば良いだろ。
176:デフォルトの名無しさん
07/10/27 02:43:44
>>172の言いたいことがケースバイケースであるなら正解
定数左が当然といってるのなら>>173が正解
177:デフォルトの名無しさん
07/10/27 02:50:31
ったくもう、まだ続ける気かよ。
>>172
こういう発想は無いの?
if( hoge_func(hoge_arg1
, hoge_arg2
, hoge_arg3
, hoge_arg4
, hoge_arg5
, hoge_arg6
, hoge_arg7
, hoge_arg8) == NULL )
{
}
178:デフォルトの名無しさん
07/10/27 02:51:18
だいたいさ、お前ら良く考えてみろよ。
疲労困憊のときに>>172の後者の文を見て、本当に==NULLを読み飛ばさない自信が有るか?
==NULLはエディタの外に出てしまっていて見えてないかもしれないんだぞ。
必ずスクロールして確かめる自身はあるか?
また、他人が読んだとき、必ずスクロールしてくれる自身はあるか?
そんなリスク背負うぐらいなら、場合によっては定数を先に書いても良いんじゃないか?
コーディングスタイルに拘るあまり、意固地になっちゃってどうするの。
179:デフォルトの名無しさん
07/10/27 02:57:03
つか、Win32APIを使ってる時点で、何と比較するのか判っているのだから、定数が左にある必要は無いと思うが?
CreateWindowを使った後にHWNDを定数と比較する
その定数は何かなんて、誰だって判る問題だ
ファイルポインタを定数と比較する
その定数はなんなのか判らない奴は、Cで真面にプログラム組む事が出来るとは思えない
変な定数と比較するのなら、定数を前に持っていくより、何のためのテストかコメントを残す方が余っ程気が利いている
180:デフォルトの名無しさん
07/10/27 02:59:16
>>177
どこで折り返すかって話になるが、
結局、自分のプログラムが何処で誰に読まれるか判らない以上、
「何列以上になったら折り返す」ということを語るのは難しい。
読み手のエディタのサイズを予測するすべは無い。
それに、どの様な書き方をしても、後に書くものは先に書くものに比べて
目立ちにくいということには変わりない。
条件式の場合は、関数の引数よりも条件そのものの方が大事だから、
大事なものを先に書いちゃおうという視点から、読み手のことを考えれば、
定数は自然と左に出てくる。逆に自分のスタイルを貫けば右に行く。
181:デフォルトの名無しさん
07/10/27 03:02:31
>>179
なんでWin32API限定で話を進めるんだよ。
>>172のどこにもWin32APIに限定しますなんて書いてないだろ。
離散数学の基礎からやり直してください。
182:デフォルトの名無しさん
07/10/27 03:02:42
いや、昔は80桁越えたら折り返すってルールがあったんだが。
マウスの付いてるパソコンしか使ったことの無い世代が増えたなぁ。
・・・しみじみ。
183:デフォルトの名無しさん
07/10/27 03:04:58
>>182
今の人だけど、常識としてちゃんと知ってるよ。受け継がれてるから安心して。
184:デフォルトの名無しさん
07/10/27 03:09:37
それを強制したら老害だけどね
185:デフォルトの名無しさん
07/10/27 03:10:42
>>181
別にWin32API限定でなくても、定数を比べる場合はif文以前に比べる定数は決まってるだろう
自分で作った関数だろうと、人の作った関数だろうと、定数で比較する時点で、どんな定数と比較するのか決まっているじゃないか
186:デフォルトの名無しさん
07/10/27 03:17:30
そもそもさ、条件式の定数を右に書くか左に書くか、必ずどっちかに統一しろって言ってる人達は何なの?
繰り返し文は、かならずfor文で書くべきで、whileとかdo-whileを使うなとか言うのか?
(俺は繰り返し文は全部forで書くがな)
分岐は必ずifで行うべきで、switchは使うなとか言うのか?
(俺はswtich文嫌いだがな)
gotoだって、使うなといわれてはいるけど、例外処理に使うのならなんら問題ない。
どうして、場合場合によって使い分けようとしないの?
187:デフォルトの名無しさん
07/10/27 03:22:49
>>172
「普通の感性を持っている人」は、そういう場合は次のようなコードを書くから、なんら心配することはありません。
void *p = hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8);
if (p == NULL) {
}
理解できましたか?
188:デフォルトの名無しさん
07/10/27 03:25:32
>>185
全ての関数の仕様が頭に入ってる人なんて居ない。
他人の使っている関数の仕様まで全部事細かに覚えてる人なんて居ない。
比べる定数は決まっているが、それはあくまで仕様上での話。
今、バグを防ぎたいと考えているのだから、全てのプログラマが仕様を完全に網羅しているとは
考えるべきではない。そういう甘い考えがバグを生む。
それから、プログラマの集中力の問題もある。
先に書いたものの方が、高い集中力を持って読んでもらえる可能性が高い。
だから、条件式の条件は成るべく先に持っていったほうが良いだろう。
長い長い関数呼び出し部を読み終わったころには、集中力がなくなっているかもしれないから。
189:デフォルトの名無しさん
07/10/27 03:27:31
>>144
おまえ自身が
> 本質的な部分だけ抜粋してるのだが
と言っているんだよな。
本来のコードだと
for (int i = 0; i < 3; i++) {
}
の中で重要な処理をしているかもしれない。
144は本質じゃないと切り捨てたかもしれないけど、その判断が間違っている可能性は高いわけだ。
だから、何をしようとしたコードなのか分からないと、冗長かどうかの判断は出来ないといっているのだが。
ここまで丁寧に説明してあげれば、144も自分のおろかさを理解してくれるかな?
190:デフォルトの名無しさん
07/10/27 03:28:23
>>187
そう書くのが一番良いんだけど、書かない奴も居るだろ。
191:デフォルトの名無しさん
07/10/27 03:32:51
とは言ったものの、わざわざ
int ret = strcmp(str1, str2);
if(ret == 0){}
なんて書く奴がどれだけ居るのか気になるが。
192:デフォルトの名無しさん
07/10/27 03:35:07
>>191
その程度なら、
if (!strcmp(str1, str2)) {}
と書くのが一番分かりやすいから。
193:デフォルトの名無しさん
07/10/27 03:40:29
>>192
つまり「程度」によるわけだよな。
だから、程度によっては定数を左に持ってきても良いだろ。
それから、
if (!strcmp(str1, str2)) {}
が許されるなら、
if (0==strcmp(str1, str2)) {}
も許されるだろ。
if ( strcmp(str1, str2) ! ) {}
と、後ろに「!」は書かないからな。
後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
考える人も多いだろう。
194:デフォルトの名無しさん
07/10/27 03:42:30
>>178
NULLとの比較は読み飛ばしにくくなるかもしれんが
hoge_arg8を読み飛ばす可能性はかなり大きくなるだろ?
引数8つもある関数を直接ifに入れるって事は
文脈上ifよりも関数呼び出し自体が重要って事だろ
それなら、エラー処理系であろうifの条件よりも
hoge_arg8が見えやすいほうが良くないか?
195:デフォルトの名無しさん
07/10/27 03:43:07
あとさ、定数左禁止派はさ、do-whileはどうなのよ。あれは良いのか?
あっちのが色物に思えるが。
196:デフォルトの名無しさん
07/10/27 03:43:16
つか、無闇矢鱈と左に定数を置きたがる奴は、出してくる例題を間違えとる
if ((LOW_AGE < age) && (age <= HI_AGE)) {}
こういう場合は、定数が左にあることに対して意味があるが
if (NULL == pointer) {}
この場合は、定数が左にあることの意味は無い
しいて言うならば、コードを何れだけ見づらくできるか位の意味はあるかもしれない
(我々は、NULLがポインタなのかを知りたいのではなく、ポインタがNULLであるのかを知りたいのだから)
197:デフォルトの名無しさん
07/10/27 03:50:28
>>193
そもそもstrcmpって定数が右を想定した作りだと思う
if (0<strcmp(str1, str2)) {}
どっちが大きい時ifの中に入るかすぐわかるか?
198:デフォルトの名無しさん
07/10/27 03:50:48
>>193
C FAQより
----------
17.3:
ほら、このわざを見て。
if(!strcmp(s1, s2))
これはよい書き方?
とくによい書き方ということはない。ただし人気のある書き方ではある。このテストは、二つの文字列が同じときに成功する。しかしこの 形は等しくないことをテストしているようにみえる。
より優れた選択肢としては以下のようなマクロを使うことがある。
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
コーディングスタイルに関する考え方は、宗教に関する考え方と同じ で、議論に終りがない。よい書き方は価値ある目標であるし、たいて いは見ればよいか悪いかわかるが、文章にすることはできない。質問 17.10も参照のこと。
----------
どこにもif (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいとは書いてありませんが?
より良い書き方としてあげている例も、
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
と、定数は右側に来ていますよ。
199:デフォルトの名無しさん
07/10/27 03:50:53
>>194
hoge_arg8は見えにくくなるが、引数が途中で切れている場合、プログラマは気づく。
だって構文的に変なところで切れているからね。
だけど、==NULLがあるかないかまでは想像が及ばないかもしれない。
・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) )
と
・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL)
は、エディタ上では同じに見えるからな。
実は後者だったのに、早とちりして、前者だと思い込んでしまうかもしれない。
200:デフォルトの名無しさん
07/10/27 03:51:32
ケースバイケースなのはわかったから
どこまでが左でどこからが右なんだ
201:デフォルトの名無しさん
07/10/27 03:51:39
ついでに、定数の左置きに対して。
--------------------------------------------------------------------------------
17.4:
どうしてif(x == 0)と書くかわりに、if(0 == x)と書く人がいるのか。
A:
これはよく以下のように書いてしまうことを防ぐためのコツである。
if(x = 0)
定数を==の前に持ってくる習慣を付けておけば誤って、
if(0 = x)
と打ち込むとコンパイラが文句を付ける
どうやら2回=を打ち込むことを覚えるよりは、テストのオペランドの順をひっくり返す ことを覚えることのほうがやさしい。
(訳注:本のほうには、これは特によい書き方というわけではないと書 いてある。実際これでは両辺が変数の場合のif(a = b)という誤りを 捉えることはできない。こんな技を覚える暇があれば、lintの使い方 を覚えること。)
202:デフォルトの名無しさん
07/10/27 03:53:55
>>199
てゆうか、折り返しもできずに、右端がスクロールしないと見えないような腐ったエディタは使うなよ。。。
203:デフォルトの名無しさん
07/10/27 03:54:12
>>196
だけど、NULLと比べてポインタがどうなのか? という考え方をすれば、NULLが先に来る。
逆に、ポインタと比べてNULLがどうなのか? とは言わない。
ポインタが先に来るときは、ポインタがNULLであるか? と言う。
つまり、どっちでもいいということだ。
204:デフォルトの名無しさん
07/10/27 03:55:19
>>200
ケースバイケースで、比較の主体が左にきたり右にきたりするソースが、一番見難い(醜い)です。
205:デフォルトの名無しさん
07/10/27 03:57:02
>>198
>>193のどこにも
>C lang FAQ に if (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいと書いてある
なんて書いてないだろ。本当に離散数学の基礎からやり直せ。
何を述べていて、何を述べていないのかの判断ぐらいつくようにしろよ。
じゃないと議論も糞も無い。
206:デフォルトの名無しさん
07/10/27 03:57:10
>>199
ああ、確かに
つまりあなたは「{」の前に改行すべきではない、と俺に言わせ
別の論争を勃発させたいのだなw
207:デフォルトの名無しさん
07/10/27 04:00:11
>>201
C langage FAQ なんてみんな一通り目を通してるんだよ。
一々貼り付けんでも良い。
今時定数を左に持ってくる人達は、>>201のような理由で左に持ってきているわけではない。
左に書いたほうが目立って言いと考えたから、左に持ってきているだけ。
それ以上でもそれ以下でも無い。目立つか目立たないか、ただそれだけ。
>>202
visual studio の初期状態ではそうですよ。
208:デフォルトの名無しさん
07/10/27 04:02:06
>>204
ケースバイケースで、繰り返し文がforになったりwhileになったりdo-whileになったら
読めない人ですか?
ケースバイケースで、分岐がifになったりswitchになったりすると、読めない人ですか?
209:デフォルトの名無しさん
07/10/27 04:04:08
>>206
改行しなくても一緒だよ。
・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) ){
と
・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL){
は、エディタ上では同じに見えるからな。
俺も通常は改行させないな。
210:デフォルトの名無しさん
07/10/27 04:04:58
おまえら一晩中こんなくだらない論議してたのか?
夜はちゃんと寝なさい。
211:デフォルトの名無しさん
07/10/27 04:06:48
だいたいさ、定数なんて右でも左でもどっちでも良いだろ。
それより、do-whileの方が気持ち悪くないか?
いやマジで。
do{
}while(exp); ← このセミコロンとか。
これは良くて、定数左は駄目とか言ってるやつって、どういう思考なのかわからん。
212:デフォルトの名無しさん
07/10/27 04:09:18
>>209
「,」で終わってたらその後に続くのはいやでも解るでしょ
端を見ようとしないのはそいつの責任だよ
213:デフォルトの名無しさん
07/10/27 04:16:44
>>208
そうだよな
繰り返し文なんていっぱいあるもんなー
#define loop(x) for(int iloop=0;iloop<(x);iloop++)
#define twice loop(2)
#define infinite for(;;)
#define never for(;0;)
#define strpatrol(s) for(char *strpatrolp=(s);*strpatrolp;++strpatrolp)
214:デフォルトの名無しさん
07/10/27 04:16:58
>>205
だんだん苦しくなってきたね。論理が破綻してきたよ、キミ。今夜が山だ。
>後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
>こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
>考える人も多いだろう。
215:デフォルトの名無しさん
07/10/27 04:17:24
俺がなぜ定数が右にしているか考えてみた
a=1;は「aに1を入れる」と読むなら
if(a==1)は「aに1が入っているなら」と読むからであって
=と==を混同させたいんだよ
そもそも混同させたくて同じ記号を使ってるんじゃないかと思えてくるほどだよ
216:デフォルトの名無しさん
07/10/27 04:17:37
>>212
続いていても、==NULLがあるかないかは、スクロールしてみるまで判らない。
引数がそれほど重要でない場合なら、スクロールを惜しむかもしれない。
実際、もうへとへとの状態でプログラムを読んでる場合だってあるわけで。
他人の責任だから関係ない、とは言っても、プロジェクトが停滞すると、
結局自分も巻き込まれるわけで。誰の責任かは正直どうでも良い。
217:デフォルトの名無しさん
07/10/27 04:19:59
>>205
おいおいw
それじゃあ、>>193が全くの主観で何の根拠も無いって事を白状しているだけじゃないかw
で、より良い例として挙げられているコードでは、定数が右側に来ているのは、軽くスルーですか?
FAQを根拠に!strcmp()を否定するなら、よりよい書き方についてもFAQを根拠にしたほうがいいんじゃないかね?
218:デフォルトの名無しさん
07/10/27 04:20:57
>>214
>後、if (!strcmp(str1, str2)) {} は C langage FAQ では悪い例として取り上げられている。
>こうかかれるぐらいなら、if (0==strcmp(str1, str2)) {} とかかれた方がまだマシだと
>考える人も多いだろう。
のどこをどう読んだら、
>C lang FAQ に if (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいと書いてある
という意味になるの?
ねぇねぇ教えて。中学生とか? 日本語読める?
「〜の方がまだマシ」という表現を使っているわけだから、よりベターな方法があることも
暗に示しているのだが。
219:デフォルトの名無しさん
07/10/27 04:21:09
NULLとかなら見りゃわかるからいいけど
変数っぽい面して実はconstでしたみたいなのが右や左にいるとうざいから
ある程度統一するのはいいんじゃないの?
220:デフォルトの名無しさん
07/10/27 04:21:41
>>216
だから、単体テストをすればちゃんとエラーは検出できますよ。
テストをやらないって企業文化なら、仕方ないかもしれませんが。
221:デフォルトの名無しさん
07/10/27 04:21:52
あした早起きして遠足だってのに・・・
こんなくだらない事で眠れなくなっちまった・・・
222:デフォルトの名無しさん
07/10/27 04:23:30
>>203
だから、なんでNULLとポインタを比較するのかが問題なんだろ
ポインタが有効なのか無効なのかを知りたいんであって、NULLと比較してポインタがどうなのかを調べたい人は誰一人居ない
定数が左にあって、唯一読みやすいのは、変数が一定の値の範囲内にある事を知りたい場合のみだろ
それ以外で、定数が左にあっても、読みにくいことはあれ、読みやすく感じることは有り得ない(そのコードを書いた奴だけは、読みやすいのかも知れないが)
223:デフォルトの名無しさん
07/10/27 04:26:28
>>208
例えば、10回処理を繰り返す部分で、
for (i = 0; i < 10; i++) {}
と
i = 0;
while (i < 10) {
i++;
}
の両方が適当に使われたとしたら、読む人は苦労するだろうな。
forとwhileの使い分けにどんな意味が隠されているのか悩むだろうか。
224:デフォルトの名無しさん
07/10/27 04:26:29
==の話ばかりするからダメなんだ
一時的に条件式を無効にしたくなったらどうする?
誰だってif(0&&condition)って書くよな?
定数0を左に書いた方がいいことは分かり切っている
225:デフォルトの名無しさん
07/10/27 04:27:25
>>217
>>193 の 後半は余談だよ。
if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね、てこと。
それならまだ定数左派の方が信用できるよねって。
ロジカルに何か述べているわけではなくて、単に人格批判です。
だけど、if (!strcmp(str1, str2)) {} なんてコードをシレっと書いちゃうやつの言うことなんて、
信用できないよね。読みやすいコードを書くためのスタートラインにも立ってない。
226:デフォルトの名無しさん
07/10/27 04:28:03
>>218
もうヤケクソ?
>>193 「〜の方がまだマシ」
そりゃ確かに、「〜の方がいい」 とは書いてないけど。
「いいとは書いてない、マシと書いた」ってアンタ、小学生の喧嘩レベルやんw
眠いの?
227:デフォルトの名無しさん
07/10/27 04:28:33
>>224
書かないよ。
228:デフォルトの名無しさん
07/10/27 04:29:43
>>220
何いってんの?
だったら初めからコーディングなんて拘らなきゃいいだろ。
どうせ単体テストするので、好きにやればいいじゃないという話になる。
229:デフォルトの名無しさん
07/10/27 04:29:50
つーかさ
もうif(0 == a || a == 0)でよくね?
右にも左にも定数が来てて完璧だろう
230:デフォルトの名無しさん
07/10/27 04:31:12
>>225
> if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね
根拠は?
単に俺が気に食わないだけ、なんて言わないよねw
もしかして、==とか<とか>=なんかが書いてないと、条件文が理解できない人ですか?
231:デフォルトの名無しさん
07/10/27 04:31:43
>>224
//if (condition)
if(0)
232:デフォルトの名無しさん
07/10/27 04:32:32
>>216
引数よりも==NULLの方が重要ならifの中に
関数呼び出しを丸ごと入れたりなんてしないでしょ
人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
そんな人のケアをする自信なんて、俺にはないな
233:デフォルトの名無しさん
07/10/27 04:32:51
>>222
ポインタが有効か無効かを知りたい、と考えることも出来るし、
逆に、有効なポインタなのか、無効なポインタなのか、と考える人も居るかもしれない。
どっちで考えてもいいし、何の問題も無い。
234:デフォルトの名無しさん
07/10/27 04:33:34
>>228
単に、「プロジェクトが停滞する」に対する反証をしただけですよ。
こんなことも読み取れないなら、ひとまず睡眠を取って、頭をクリアさせたらどうですか?
え、クリアさせても今と変わらない?
それは、もう、どうしようもないかな。
235:デフォルトの名無しさん
07/10/27 04:35:06
ゴガギーン
ドッカン
m ドッカン
=====) )) ☆ ___________
∧_∧ | | / / おらっ!出てこい
( )| |_____ ∧_∧ < Cマガジン ●田
「 ⌒ ̄ | | || (´Д` ) \ おまいのせいで、こんだけ・・・
| /  ̄ | |/ 「 \  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
236:デフォルトの名無しさん
07/10/27 04:36:29
こんな醜い争いが二度と起こらないように
C++0xでは定数をLvalueにしてもらうしかないな
237:デフォルトの名無しさん
07/10/27 04:36:45
>>233
無効なポインタがどれかを調べたいなら、
if (NULL == xxx)って書いたほうが分かりやすいかもね。
238:デフォルトの名無しさん
07/10/27 04:37:29
>>223
後者のケースだと、for文を使うべきだよ。
whileを使う時は主にカウンタ変数がいらない時だな。
forとwhileを使い分ける人が居るように、
定数を右に書いたり左に書いたりする人が居ても良いだろ。
そして、定数が左だからってそんなに怒るほどのものでもない。
239:デフォルトの名無しさん
07/10/27 04:40:31
電車の座席に座るヤツが居るように
電車の床に座ってもいいだろ!
公園のベンチに座るヤツが居るように
コンビニの駐車場に座り込んでもいいだろ!
そんなに怒るほどのものでもない。
240:デフォルトの名無しさん
07/10/27 04:43:02
>>226
眠いのはお前だろ。眠くてしょうがないお前が勝手に勘違いしただけだろ。
「AよりBの方がまだマシ」という言い方をした場合、
「Bが良い」と主張しているということには決してならないよ。
糞と尿、どっち食うかと言われて、
「糞より尿の方がまだマシ」と答えた場合、
「尿が良い」と言うことにはならないだろ。
要はお前が勝手に勘違いしてるんだよ。
お前みたいなおっちょこちょいが居るから、文句言われようとも、
わざわざ定数を左に書かざるを得なくなる。その辺わかれ。
241:デフォルトの名無しさん
07/10/27 04:43:16
もう「比較演算子の左オペランドに定数を置く奴は死ね」スレでも立ててそっちでやってくれんかね
242:デフォルトの名無しさん
07/10/27 04:46:20
>>240
おまえ、実は>>80だろ?
もう、定数を左に置いても苛めないからさ、どこの会社かだけは教えてくれ。
お前を真人間に教育するよりも、関係を持たないようにする方が、遥かに安上がりだわ。
243:デフォルトの名無しさん
07/10/27 04:46:23
寿司食いたいフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
244:デフォルトの名無しさん
07/10/27 04:48:19
if (0 == a)
↑ ↑
糞 尿
245:デフォルトの名無しさん
07/10/27 04:49:43
俺なら尿を選ぶ。糞はちょっとな・・・
246:デフォルトの名無しさん
07/10/27 04:52:19
>>230
230は単に釣りだと信じたいのだが・・・。
strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、
正真正銘、整数としての戻り値を返す。
だから整数と比較するべき。
意味上も型上も正真正銘整数なものを、
ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。
逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。
Cの禁じ手全部 OK じゃね?
定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。
247:デフォルトの名無しさん
07/10/27 04:58:36
やばい、真性のキ印だったのか。
>>246
そもそも、Cにはboolなんて型は存在しないぞ。
ifとかの条件式は、単に0か非0かを見ているだけ。
248:デフォルトの名無しさん
07/10/27 05:01:44
>if (!strcmp(・・・)) と書くのが一番わかりやすい
てのは、いくら何でも間違いだろ。
勢いで書き込んだ後、おっといけね、strcmp だった〜orz ってとこだろね。
249:デフォルトの名無しさん
07/10/27 05:02:52
>>232
>引数よりも==NULLの方が重要ならifの中に
>関数呼び出しを丸ごと入れたりなんてしないでしょ
そうとは限らんよ。関数として見れば、関数が大事だし、
if文として見れば、条件が大事だ。
>人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて
>そんな人のケアをする自信なんて、俺にはないな
改修するならしっかり読むが、さらっと目を通すだけという場合も有るだろ。
おっちょこちょいなやつは何処にでも居るもので、そういう奴が変な勘違いを起して、
面倒を起したら困る。
実際、このスレにも自分の反論しようとしている相手の文章すら、
まともに読まない奴が居るわけで。
んで、自分のミスなのに、「お前の書き方が悪い」と開き直る。
だから、自分から相手が読みミスらないような書き方をする必要が出てくる。
結局こっちにも火の粉は飛んでくるからね。
250:デフォルトの名無しさん
07/10/27 05:05:45
最高にド低脳な発言してください in ム版(XVII)
スレリンク(tech板)
125 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/27(土) 05:00:40
strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、
正真正銘、整数としての戻り値を返す。
だから整数と比較するべき。
意味上も型上も正真正銘整数なものを、
ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。
逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。
Cの禁じ手全部 OK じゃね?
定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。
↑最高にド低脳な発言!
251:デフォルトの名無しさん
07/10/27 05:09:05
>>250
ワロタ
自分で「ド低脳」って認めてどうするw
252:デフォルトの名無しさん
07/10/27 05:09:26
>>234
だから好きにやれば良いじゃん。
ウマいコードってのは、プロジェクトが停滞しづらいコードだろ。
逆にヘタなコードってのは、プロジェクトを停滞させるコードだろ。
あなたにウマいコードは必要ないじゃない。
253:デフォルトの名無しさん
07/10/27 05:10:09
オチがついたところで、また明日。おやすみなさい。
254:デフォルトの名無しさん
07/10/27 05:11:08
>>239 は コンパイルエラー
255:デフォルトの名無しさん
07/10/27 05:13:27
>>242
違う。
この議論は前スレから永遠と続いている。
というか、このスレは今現在俺だけで持ってるようなものなんだけど、
前スレからの流れを見てもらえれば、俺が>>80でないことは分かる。
物事への認識のレベルが違いすぎるからすぐ判るはず。
256:デフォルトの名無しさん
07/10/27 05:18:14
>>247
boolが無いから整数で代用しているんだろ。
>>247の2行目に、
>boolを整数で代用している
という文がちゃんと入ってるだろ。
単に整数値といっても、C言語の場合は、意味の上では、整数だったりboolだったりするから、
その辺は使い分けるべきだろ。
その程度の意識も無いのに、ウマいもヘタも無いね。
そういうやつは定数が左にきたぐらいでグダグダいう立場に無い。
糞食いながら、「しょんべんマズー」と言ってるようなものだ。
257:デフォルトの名無しさん
07/10/27 05:27:13
つーかもう今日は寝る。
返事はまた明日気が向いた時に返すかも。
今日は張り合い無かったなぁ。
if (!strcmp(str1, str2)) {} が 汚いって事すらもわからないような奴では、
ちょっと流石に相手にならないよ。
そういうやつが、他人のコードを綺麗汚いと、いきり立ってるのかと思うと、泣けてくるね。
身の程をわきまえるべき。
>>250 が >>125 をド低脳スレに貼ったらしいが、この始末どうつけるつもりなんだろうな。
他の右派(というか、単なるアンチ俺、もとい、暇つぶしの友)が可愛そうだ。
258:デフォルトの名無しさん
07/10/27 05:35:47
仮にif (!strcmp(str1, str2)) {}がif (0==strcmp(str1, str2)) {}に劣るとしても、
if (0==strcmp(str1, str2)) {} がif (strcmp(str1, str2)==0) {} に劣ることには変わりないのに。
259:デフォルトの名無しさん
07/10/27 07:33:42
変数左辺派による工作
URLリンク(ja.wikipedia.org)
260:デフォルトの名無しさん
07/10/27 07:38:41
腹減った
261:デフォルトの名無しさん
07/10/27 07:43:11
>>257
>暇つぶしの友
他所でやれ脳足りん。
262:デフォルトの名無しさん
07/10/27 07:49:35
if (!strcmp(str1, str2)) {} は綺麗
*dst++ = *src++ と勝るとも劣らないくらい綺麗
263:デフォルトの名無しさん
07/10/27 07:50:41
while(*dst++ = *src++);
264:デフォルトの名無しさん
07/10/27 08:24:17
英語ができると、if (!strcmp を、if not string compare と読んでしまうので
等値性をテストしているとは認識しにくいな。
!をnotと読まない人は気にならないんだろうけど。
265:デフォルトの名無しさん
07/10/27 08:55:17
if (!strcmp(str1, str2)) {} の何がいけないのか分からない
266:デフォルトの名無しさん
07/10/27 08:56:01
if(str1 == str2) {}
だろ上官
267:デフォルトの名無しさん
07/10/27 08:59:28
>>266
その発想は無かった
268:デフォルトの名無しさん
07/10/27 09:06:07
・・・なんでこんなことを議論しているのかがよく判らない。
269:デフォルトの名無しさん
07/10/27 09:14:44
おまいらおはよう。未だに左定数の話をしていて正直がっかりだ。
>>169
賛同ありがとう。「簡単なことをこんなに難しく書くやつがいるんだぜ」「頭
痛いよなぁ」で済むと思ったら、予想外の展開になって別の意味で頭が痛かっ
たよ。
>>171
皮肉? いや、いたってマジだぞ? だってソース見たとき本気で頭かかえたもの。
ちなみにこういうコードへの対策は、「10行以上書いたらレビューしろ。毎日
レビューしろ。動いてからレビューするな」以外に知らないんだ。(そういう
意味でペアプログラミングはすげー有用だと思うんだが、まだ実現できたこと
がない)
>>189
> の中で重要な処理をしているかもしれない。
それだったら「本質の抜粋」にならないでしょーが。
for文の中は、変数名と定数値以外、「そのまんま」だ。
違う点は、オリジナルはC++じゃなくてJavaなこと、関数(メソッド)のシグネチャ、
書いた処理の前にもコードがあること、最後のif文のブロックの中身。
270:デフォルトの名無しさん
07/10/27 09:39:00
>>269
補足しておくと、ここで言ってる「本質」とは、
「b-N<a≦b (a, b, Nは整数) を判定する、ただそれだけのために、大小比較じゃなくてループを使ってる」
ってことだと書けば理解してもらえるか?>>189
271:デフォルトの名無しさん
07/10/27 09:58:28
ぱっと見て「ヘタだなぁ」と思うスレ
272:デフォルトの名無しさん
07/10/27 10:06:30
くだらねー議論してんなぁ。
定数を左に置くか否かなんてとっくの昔に結論でてるだろうが。
>>196のような例外を除いて定数を左において可読性落としたり、
スクロールしないと全部が見渡せないような条件式なんか書くな。
コンパイラが警告出さない時の数十年前に編み出された小手先を
未だに神の一手が如く崇拝してんじゃねぇよ、ボケ。
これを知ってる俺って技術力たけぇなんて思ってたかもしれんが、
ド低脳の証明だ。玉石混交の石のほうだ、カス。
273:デフォルトの名無しさん
07/10/27 10:14:14
おまえら、何度も同じことをくりかえすならfor文の中にでも入れとけよ
274:デフォルトの名無しさん
07/10/27 10:18:04
>271
禿同
275:デフォルトの名無しさん
07/10/27 10:18:23
おはよう。しつこいがもう一度爆弾投下!
test.cpp
if (a = 0) printf("x");
D:>bcc32 test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
警告 W8060 test.cpp 7: おそらく不正な代入(関数 main() ) ←←←【ここ注目!】
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
>>80
わざわざひねくれて if (0 == a) としなくても、ちゃんと警告出してくれるから。
ミスを防ぐため、というのは全然理由にならない。
「定数は左」って書き方って、15年以上も前に「Cマガジン」って雑誌が流行らせたんだよね。
当時の古いコンパイラは上のような警告は出していなかったかもしれない。
でも今は無料のタダのコンパイラでさえ警告出すようになって、「定数左」は意味の無いものになった。
15年も前に決着が付いて廃れたことを、いまだに「神の福音」のように信じ込んでいるヤツがいるんだな。
おまいは隠れキリシタンかw
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5384日前に更新/89 KB
担当:undef