1 名前:デフォルトの名無しさん [2007/10/25(木) 03:35:55 ] 禁止ネタ(超既出) ・長い関数 ・深いネスト ・グローバル変数 ・goto ・memset ・malloc - free ・局所ブロック ・サンプルコードのtypo ・記述スタイル ・関数・変数名 過去スレ その5: pc11.2ch.net/test/read.cgi/tech/1155315371/ その4: pc8.2ch.net/test/read.cgi/tech/1153312202/ その3: pc8.2ch.net/test/read.cgi/tech/1149986051/ その2: pc8.2ch.net/test/read.cgi/tech/1142741989/ 初代 : pc8.2ch.net/test/read.cgi/tech/1141867015/
129 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:15:42 ] 80は、左に置きたいから置いているようにしか思えない。 コンパイルエラーになることを理由にしているようだが、 それは右に置いてもコンパイラの警告が出るので互角(散々既出)。 となると、ほかに理由を提示しない今、残る理由は各人の好み。 そこで80は左を選択したということだろう。
130 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:19:37 ] >>123 ・この警告は出るのが当たり前、気にするな ・この警告は出てもいいけど本当に大丈夫かチェック汁 ・この警告出したバカは氏ね みたいに警告のランク分けとかするよね。
131 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:20:02 ] 単に後に引けなくなってるだけだろ。
132 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:23:50 ] >>129 > それは右に置いてもコンパイラの警告が出るので互角(散々既出)。 単にこれを知らないだけだと思うよ。
133 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:24:11 ] 私はコードチェッカというものをいままで使ったことがありません そんなに有効なものですか? 有名なものではどんなものがありますか?
134 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:27:49 ] OSと言語は?
135 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:30:19 ] >>133 ttp://www.swtest.jp/tools.html 静的解析ツールでぐぐれ
136 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:32:31 ] べつに必要としているわけではなくてどのようなものか知りたいので 何でもいいですが、自分の普段の仕事ではWindowsでC++です Cygwinも常用しているのでUNIX系でも試せると思います
137 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:36:39 ] どんなものか知りたいなら、Cygwinでcheckをインストールして、Cで怪しげなコードを書いてチェックしてみろ。
138 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:37:42 ] 間違えた。checkじゃなくて、splintだ。
139 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:41:10 ] WindowsのC++なら、ここから体験版をゲットするんだ。 ttp://www.techmatrix.co.jp/products/quality/download/index.html
140 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:41:52 ] ぱっと見て「ばかだなぁ」という奴を相手にしなくていいから、 「ヘタだなぁ」と思うコードを貼ってくれ。
141 名前:133 mailto:sage [2007/10/27(土) 00:42:06 ] >>135 あ、QACとかのことですか 使ったことはないけどプレゼンは受けたことがあります そのときは、馬鹿に使わせるのは怖いツールだなと思いました
142 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:47:21 ] 長文お疲れだけど、それみんなもう知ってるから・・・
146 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:55:08 ] >>116 うん、君の会社が凄すぎるから、下民たちの為に会社名を教えてくれ。 > 警告は全部潰してるよ。 コンパイラの設定を変更して、特定の警告は表示させないようにしたのか?
147 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:56:08 ] 「みんな」 に 80 は含まれていないが。
148 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:00:53 ] >>144 何を問題にしているのか分からないけど。 if (result == true)を気にしているのだとしたら、全員にメールでも出したら? 一番いいのは、タコなコードを書く奴は、片っ端からプロジェクト外に追放することなんだけど。 それをやったら、誰も残らなかったなんてのが笑い話じゃなくなるからな。
149 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:02:49 ] >>144 b-a が0〜2ならOK,それ以外ならNGを出力ってこと? 不等号演算子とか教えるといいんじゃないかな。
150 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:05:15 ] どうしようもなく汚いコードのところで仕事をしたとき、警告がでまくったけど、 ま、こんなもんかと思って、放置しておいたら、上のヒトの目にとまって、 警告が出てるじゃないかと注意されてしまった。 で、警告の原因を調べたら、そのコードを動かす環境にインストールされてる、その部署の ライブラリがバージョン古くて、プロトタイプが、K&R方式になってやんの。 仕方ないので、makefileを書き換えて、警告を全部抑制した。
151 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:05:37 ] つまり if (b - a < 3) OK; ということでしょ 境界の辺が自信ないが
152 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:19:53 ] >>151 b<aだとダメじゃね?
153 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:20:11 ] プロトタイプ宣言はK&Rにはできないんじゃないだろうか
154 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:22:32 ] それは当然 else 節を省略したのですけど そういうことではない? 酒が入ってるので不安
155 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:26:07 ] >>153 ああ、そうだっけ。 int hoge(); みたいに、戻り値だけで、引数のないプロトタイプだった。
156 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:31:26 ] それは多分C言語的には完全に合法なので警告のほうがうざいと思う 先に宣言が int f(); とあって後で定義が int f(int a) { ... } とANSIならばエラーエラーかな? うろ覚えでごめん
157 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:33:18 ] >>80 の所属している会社を大胆予想。 仕事は来ていて技術力は無いという辺りから、 ・富士通 ・日立 ・NEC の関連会社を予想。 しかし、仕事を大量に受けているという記述から想像するに、 ・人材派遣会社 に所属しているのではないだろうか。 こう考えると、技術力が無いのにそれに気が付かない理由も説明できると思う。 #JAVAのswingで画面を作っているんだけど、クラス図もイベントトレース図も存在しないって、此の先木大丈夫なんだろうか。
158 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:39:31 ] > 80 名前: デフォルトの名無しさん [sage] 投稿日: 2007/10/26(金) 22:43:44 から3時間足らずで約70レスか。 このペースで行けば、39時間かからずに埋め立て完了か。 今までの過疎化が嘘のようだなw
159 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:41:01 ] >>148 レビューしてすら、さくっとスルーされそうなことはわかりますた。 >>149 yes. 問題は、コレと同レベルのコードがと某社のおひさるなサイト上で動いてたってことなんだ。 さらに恐しいことは、a, bは日付を8桁の整数に変換したものだったりしたんだ……。 >>154 条件式が足りてないれす。こんな感じ? int d = b - a; if (0 <= d && d < 3) ...
160 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:47:51 ] というか、何をしたいコードなのか教えてくれないと、144のコードが正しいか間違っているかは判断できないぞ。
161 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:50:10 ] 正しいか間違ってるかの問題じゃなく 冗長すぎるのを問題にしていると思う
162 名前:144 mailto:sage [2007/10/27(土) 01:59:48 ] >>159 あ、「日付を8桁の整数に」ってのは、20071027みたいなやつ(YYYYMMDD)のことね。為念。
163 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:02:36 ] 冗長かどうかも、何がやりたいのかが分からないと、何とも判断できないからね。 問題によっては、冗長に見えるやり方が最適解になったりすることもあるし。
164 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:05:19 ] でもあれはさすがに型も明示されてるし言い逃れようがないでしょ
165 名前:144 mailto:sage [2007/10/27(土) 02:11:50 ] >>161 です。冗長過ぎるというより、きっぱりはっきり無駄かつ無意味。 >>160 >>163 一般論としてクソコードであると賛同を得られないことに絶望した。 つか、釣りか? 釣りなのか?
166 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:18:21 ] >>165 このスレになじまない内容なので、あまり興味を持たれなかっただけかと
167 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:18:22 ] お前が釣ろうとしてるのかと深読みしてしまったよ
168 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:24:40 ] >>144 はこのスレで希に見る良題だと思ったけど あぁ、希だからか ちなみに自分は144ではないです
169 名前:149 mailto:sage [2007/10/27(土) 02:29:03 ] >>165 俺は賛同するぞ。 簡単な処理をあんなに難しく実装する才能はある意味凄いと思う。
170 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:32:58 ] if (cond) for (;;) { } else { } とか for (;;) if (cond1) if (cond2) { } ってありなの?
171 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:34:06 ] >レビュー以外でこんなコードが涌いて出るのを防ぐ手段、知らないか? これは質問じゃなくてただの皮肉だったのか
172 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:39:46 ] >>172 関数より定数の方が長い場合もあるわけで
174 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:41:33 ] >>170 文法的には間違っては無さそうだが、ひどく読みづらいな。
175 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:41:49 ] >>173 その場合は定数を後ろに書けば良いだろ。
176 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:51:18 ] だいたいさ、お前ら良く考えてみろよ。 疲労困憊のときに>>172 の後者の文を見て、本当に==NULLを読み飛ばさない自信が有るか? ==NULLはエディタの外に出てしまっていて見えてないかもしれないんだぞ。 必ずスクロールして確かめる自身はあるか? また、他人が読んだとき、必ずスクロールしてくれる自身はあるか? そんなリスク背負うぐらいなら、場合によっては定数を先に書いても良いんじゃないか? コーディングスタイルに拘るあまり、意固地になっちゃってどうするの。
179 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:57:03 ] つか、Win32APIを使ってる時点で、何と比較するのか判っているのだから、定数が左にある必要は無いと思うが? CreateWindowを使った後にHWNDを定数と比較する その定数は何かなんて、誰だって判る問題だ ファイルポインタを定数と比較する その定数はなんなのか判らない奴は、Cで真面にプログラム組む事が出来るとは思えない 変な定数と比較するのなら、定数を前に持っていくより、何のためのテストかコメントを残す方が余っ程気が利いている
180 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:59:16 ] >>177 どこで折り返すかって話になるが、 結局、自分のプログラムが何処で誰に読まれるか判らない以上、 「何列以上になったら折り返す」ということを語るのは難しい。 読み手のエディタのサイズを予測するすべは無い。 それに、どの様な書き方をしても、後に書くものは先に書くものに比べて 目立ちにくいということには変わりない。 条件式の場合は、関数の引数よりも条件そのものの方が大事だから、 大事なものを先に書いちゃおうという視点から、読み手のことを考えれば、 定数は自然と左に出てくる。逆に自分のスタイルを貫けば右に行く。
181 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:02:31 ] >>179 なんでWin32API限定で話を進めるんだよ。 >>172 のどこにもWin32APIに限定しますなんて書いてないだろ。 離散数学の基礎からやり直してください。
182 名前:デフォルトの名無しさん [2007/10/27(土) 03:02:42 ] いや、昔は80桁越えたら折り返すってルールがあったんだが。 マウスの付いてるパソコンしか使ったことの無い世代が増えたなぁ。 ・・・しみじみ。
183 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:04:58 ] >>182 今の人だけど、常識としてちゃんと知ってるよ。受け継がれてるから安心して。
184 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:09:37 ] それを強制したら老害だけどね
185 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:10:42 ] >>181 別にWin32API限定でなくても、定数を比べる場合はif文以前に比べる定数は決まってるだろう 自分で作った関数だろうと、人の作った関数だろうと、定数で比較する時点で、どんな定数と比較するのか決まっているじゃないか
186 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:17:30 ] そもそもさ、条件式の定数を右に書くか左に書くか、必ずどっちかに統一しろって言ってる人達は何なの? 繰り返し文は、かならずfor文で書くべきで、whileとかdo-whileを使うなとか言うのか? (俺は繰り返し文は全部forで書くがな) 分岐は必ずifで行うべきで、switchは使うなとか言うのか? (俺はswtich文嫌いだがな) gotoだって、使うなといわれてはいるけど、例外処理に使うのならなんら問題ない。 どうして、場合場合によって使い分けようとしないの?
187 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:25:32 ] >>185 全ての関数の仕様が頭に入ってる人なんて居ない。 他人の使っている関数の仕様まで全部事細かに覚えてる人なんて居ない。 比べる定数は決まっているが、それはあくまで仕様上での話。 今、バグを防ぎたいと考えているのだから、全てのプログラマが仕様を完全に網羅しているとは 考えるべきではない。そういう甘い考えがバグを生む。 それから、プログラマの集中力の問題もある。 先に書いたものの方が、高い集中力を持って読んでもらえる可能性が高い。 だから、条件式の条件は成るべく先に持っていったほうが良いだろう。 長い長い関数呼び出し部を読み終わったころには、集中力がなくなっているかもしれないから。
189 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:27:31 ] >>144 おまえ自身が > 本質的な部分だけ抜粋してるのだが と言っているんだよな。 本来のコードだと for (int i = 0; i < 3; i++) { } の中で重要な処理をしているかもしれない。 144は本質じゃないと切り捨てたかもしれないけど、その判断が間違っている可能性は高いわけだ。 だから、何をしようとしたコードなのか分からないと、冗長かどうかの判断は出来ないといっているのだが。 ここまで丁寧に説明してあげれば、144も自分のおろかさを理解してくれるかな?
190 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:28:23 ] >>187 そう書くのが一番良いんだけど、書かない奴も居るだろ。
191 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:32:51 ] とは言ったものの、わざわざ int ret = strcmp(str1, str2); if(ret == 0){} なんて書く奴がどれだけ居るのか気になるが。
192 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:35:07 ] >>191 その程度なら、 if (!strcmp(str1, str2)) {} と書くのが一番分かりやすいから。
193 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:42:30 ] >>178 NULLとの比較は読み飛ばしにくくなるかもしれんが hoge_arg8を読み飛ばす可能性はかなり大きくなるだろ? 引数8つもある関数を直接ifに入れるって事は 文脈上ifよりも関数呼び出し自体が重要って事だろ それなら、エラー処理系であろうifの条件よりも hoge_arg8が見えやすいほうが良くないか?
195 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:43:07 ] あとさ、定数左禁止派はさ、do-whileはどうなのよ。あれは良いのか? あっちのが色物に思えるが。
196 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:43:16 ] つか、無闇矢鱈と左に定数を置きたがる奴は、出してくる例題を間違えとる if ((LOW_AGE < age) && (age <= HI_AGE)) {} こういう場合は、定数が左にあることに対して意味があるが if (NULL == pointer) {} この場合は、定数が左にあることの意味は無い しいて言うならば、コードを何れだけ見づらくできるか位の意味はあるかもしれない (我々は、NULLがポインタなのかを知りたいのではなく、ポインタがNULLであるのかを知りたいのだから)
197 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:50:28 ] >>193 そもそもstrcmpって定数が右を想定した作りだと思う if (0<strcmp(str1, str2)) {} どっちが大きい時ifの中に入るかすぐわかるか?
198 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:50:53 ] >>194 hoge_arg8は見えにくくなるが、引数が途中で切れている場合、プログラマは気づく。 だって構文的に変なところで切れているからね。 だけど、==NULLがあるかないかまでは想像が及ばないかもしれない。 ・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) ) と ・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL) は、エディタ上では同じに見えるからな。 実は後者だったのに、早とちりして、前者だと思い込んでしまうかもしれない。
200 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:51:32 ] ケースバイケースなのはわかったから どこまでが左でどこからが右なんだ
201 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:53:55 ] >>199 てゆうか、折り返しもできずに、右端がスクロールしないと見えないような腐ったエディタは使うなよ。。。
203 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:54:12 ] >>196 だけど、NULLと比べてポインタがどうなのか? という考え方をすれば、NULLが先に来る。 逆に、ポインタと比べてNULLがどうなのか? とは言わない。 ポインタが先に来るときは、ポインタがNULLであるか? と言う。 つまり、どっちでもいいということだ。
204 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:55:19 ] >>200 ケースバイケースで、比較の主体が左にきたり右にきたりするソースが、一番見難い(醜い)です。
205 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:57:02 ] >>198 >>193 のどこにも >C lang FAQ に if (!strcmp(str1, str2)) {} よりif (0==strcmp(str1, str2)) {} の方がいいと書いてある なんて書いてないだろ。本当に離散数学の基礎からやり直せ。 何を述べていて、何を述べていないのかの判断ぐらいつくようにしろよ。 じゃないと議論も糞も無い。
206 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 03:57:10 ] >>199 ああ、確かに つまりあなたは「{」の前に改行すべきではない、と俺に言わせ 別の論争を勃発させたいのだなw
207 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:00:11 ] >>201 C langage FAQ なんてみんな一通り目を通してるんだよ。 一々貼り付けんでも良い。 今時定数を左に持ってくる人達は、>>201 のような理由で左に持ってきているわけではない。 左に書いたほうが目立って言いと考えたから、左に持ってきているだけ。 それ以上でもそれ以下でも無い。目立つか目立たないか、ただそれだけ。 >>202 visual studio の初期状態ではそうですよ。
208 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:02:06 ] >>204 ケースバイケースで、繰り返し文がforになったりwhileになったりdo-whileになったら 読めない人ですか? ケースバイケースで、分岐がifになったりswitchになったりすると、読めない人ですか?
209 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:04:08 ] >>206 改行しなくても一緒だよ。 ・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) ){ と ・・・hoge_arg6, hoge_arg7, |エディタの端| hoge_arg8) == NULL){ は、エディタ上では同じに見えるからな。 俺も通常は改行させないな。
210 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:04:58 ] おまえら一晩中こんなくだらない論議してたのか? 夜はちゃんと寝なさい。
211 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:06:48 ] だいたいさ、定数なんて右でも左でもどっちでも良いだろ。 それより、do-whileの方が気持ち悪くないか? いやマジで。 do{ }while(exp); ← このセミコロンとか。 これは良くて、定数左は駄目とか言ってるやつって、どういう思考なのかわからん。
212 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:09:18 ] >>209 「,」で終わってたらその後に続くのはいやでも解るでしょ 端を見ようとしないのはそいつの責任だよ
213 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:17:24 ] 俺がなぜ定数が右にしているか考えてみた a=1;は「aに1を入れる」と読むなら if(a==1)は「aに1が入っているなら」と読むからであって =と==を混同させたいんだよ そもそも混同させたくて同じ記号を使ってるんじゃないかと思えてくるほどだよ
216 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:17:37 ] >>212 続いていても、==NULLがあるかないかは、スクロールしてみるまで判らない。 引数がそれほど重要でない場合なら、スクロールを惜しむかもしれない。 実際、もうへとへとの状態でプログラムを読んでる場合だってあるわけで。 他人の責任だから関係ない、とは言っても、プロジェクトが停滞すると、 結局自分も巻き込まれるわけで。誰の責任かは正直どうでも良い。
217 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:19:59 ] >>205 おいおいw それじゃあ、>>193 が全くの主観で何の根拠も無いって事を白状しているだけじゃないかw で、より良い例として挙げられているコードでは、定数が右側に来ているのは、軽くスルーですか? FAQを根拠に!strcmp()を否定するなら、よりよい書き方についてもFAQを根拠にしたほうがいいんじゃないかね?
218 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:21:09 ] NULLとかなら見りゃわかるからいいけど 変数っぽい面して実はconstでしたみたいなのが右や左にいるとうざいから ある程度統一するのはいいんじゃないの?
220 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:21:41 ] >>216 だから、単体テストをすればちゃんとエラーは検出できますよ。 テストをやらないって企業文化なら、仕方ないかもしれませんが。
221 名前:デフォルトの名無しさん [2007/10/27(土) 04:21:52 ] あした早起きして遠足だってのに・・・ こんなくだらない事で眠れなくなっちまった・・・
222 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:23:30 ] >>203 だから、なんでNULLとポインタを比較するのかが問題なんだろ ポインタが有効なのか無効なのかを知りたいんであって、NULLと比較してポインタがどうなのかを調べたい人は誰一人居ない 定数が左にあって、唯一読みやすいのは、変数が一定の値の範囲内にある事を知りたい場合のみだろ それ以外で、定数が左にあっても、読みにくいことはあれ、読みやすく感じることは有り得ない(そのコードを書いた奴だけは、読みやすいのかも知れないが)
223 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:26:28 ] >>208 例えば、10回処理を繰り返す部分で、 for (i = 0; i < 10; i++) {} と i = 0; while (i < 10) { i++; } の両方が適当に使われたとしたら、読む人は苦労するだろうな。 forとwhileの使い分けにどんな意味が隠されているのか悩むだろうか。
224 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:26:29 ] ==の話ばかりするからダメなんだ 一時的に条件式を無効にしたくなったらどうする? 誰だってif(0&&condition)って書くよな? 定数0を左に書いた方がいいことは分かり切っている
225 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:28:33 ] >>224 書かないよ。
228 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:29:43 ] >>220 何いってんの? だったら初めからコーディングなんて拘らなきゃいいだろ。 どうせ単体テストするので、好きにやればいいじゃないという話になる。
229 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:29:50 ] つーかさ もうif(0 == a || a == 0)でよくね? 右にも左にも定数が来てて完璧だろう
230 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:31:12 ] >>225 > if (!strcmp(str1, str2)) {} なんて書いちゃう奴のいうことなんて信用できないね 根拠は? 単に俺が気に食わないだけ、なんて言わないよねw もしかして、==とか<とか>=なんかが書いてないと、条件文が理解できない人ですか?
231 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:31:43 ] >>224 //if (condition) if(0)
232 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:32:32 ] >>216 引数よりも==NULLの方が重要ならifの中に 関数呼び出しを丸ごと入れたりなんてしないでしょ 人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて そんな人のケアをする自信なんて、俺にはないな
233 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:32:51 ] >>222 ポインタが有効か無効かを知りたい、と考えることも出来るし、 逆に、有効なポインタなのか、無効なポインタなのか、と考える人も居るかもしれない。 どっちで考えてもいいし、何の問題も無い。
234 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:33:34 ] >>228 単に、「プロジェクトが停滞する」に対する反証をしただけですよ。 こんなことも読み取れないなら、ひとまず睡眠を取って、頭をクリアさせたらどうですか? え、クリアさせても今と変わらない? それは、もう、どうしようもないかな。
235 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:35:06 ] ゴガギーン ドッカン m ドッカン =====) )) ☆ ___________ ∧_∧ | | / / おらっ!出てこい ( )| |_____ ∧_∧ < Cマガジン ●田 「 ⌒ ̄ | | || (´Д` ) \ おまいのせいで、こんだけ・・・ | /  ̄ | |/ 「 \  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | | || || /\\ | | | | | へ//| | | | | | | ロ|ロ |/,へ \| | | | | ∧ | | | |/ \ / ( ) | | | |〈 | | | | / / / / | / | 〈| | | / / / / | | || | | / / / / =-----=-------- | |
236 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:36:29 ] こんな醜い争いが二度と起こらないように C++0xでは定数をLvalueにしてもらうしかないな
237 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:36:45 ] >>233 無効なポインタがどれかを調べたいなら、 if (NULL == xxx)って書いたほうが分かりやすいかもね。
238 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:37:29 ] >>223 後者のケースだと、for文を使うべきだよ。 whileを使う時は主にカウンタ変数がいらない時だな。 forとwhileを使い分ける人が居るように、 定数を右に書いたり左に書いたりする人が居ても良いだろ。 そして、定数が左だからってそんなに怒るほどのものでもない。
239 名前:デフォルトの名無しさん [2007/10/27(土) 04:40:31 ] 電車の座席に座るヤツが居るように 電車の床に座ってもいいだろ! 公園のベンチに座るヤツが居るように コンビニの駐車場に座り込んでもいいだろ! そんなに怒るほどのものでもない。
240 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:43:02 ] >>226 眠いのはお前だろ。眠くてしょうがないお前が勝手に勘違いしただけだろ。 「AよりBの方がまだマシ」という言い方をした場合、 「Bが良い」と主張しているということには決してならないよ。 糞と尿、どっち食うかと言われて、 「糞より尿の方がまだマシ」と答えた場合、 「尿が良い」と言うことにはならないだろ。 要はお前が勝手に勘違いしてるんだよ。 お前みたいなおっちょこちょいが居るから、文句言われようとも、 わざわざ定数を左に書かざるを得なくなる。その辺わかれ。
241 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:43:16 ] もう「比較演算子の左オペランドに定数を置く奴は死ね」スレでも立ててそっちでやってくれんかね
242 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:46:20 ] >>240 おまえ、実は>>80 だろ? もう、定数を左に置いても苛めないからさ、どこの会社かだけは教えてくれ。 お前を真人間に教育するよりも、関係を持たないようにする方が、遥かに安上がりだわ。
243 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:46:23 ] 寿司食いたいフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
244 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:48:19 ] if (0 == a) ↑ ↑ 糞 尿
245 名前:デフォルトの名無しさん [2007/10/27(土) 04:49:43 ] 俺なら尿を選ぶ。糞はちょっとな・・・
246 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:52:19 ] >>230 230は単に釣りだと信じたいのだが・・・。 strcmpはあくまで整数を返す。boolを整数で代用しているわけではなく、 正真正銘、整数としての戻り値を返す。 だから整数と比較するべき。 意味上も型上も正真正銘整数なものを、 ただ偽が0だからという理由だけで、あえてboolとして比較する、なんてのはナンセンスだよ。 逆に、if (!strcmp(str1, str2)) {} が OK な人なら、他は何やってもOKでしょ。 Cの禁じ手全部 OK じゃね? 定数が左にきたぐらいでごちゃごちゃ言う立場に無いね。
247 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:58:36 ] やばい、真性のキ印だったのか。 >>246 そもそも、Cにはboolなんて型は存在しないぞ。 ifとかの条件式は、単に0か非0かを見ているだけ。
248 名前:デフォルトの名無しさん [2007/10/27(土) 05:01:44 ] >if (!strcmp(・・・)) と書くのが一番わかりやすい てのは、いくら何でも間違いだろ。 勢いで書き込んだ後、おっといけね、strcmp だった〜orz ってとこだろね。
249 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:02:52 ] >>232 >引数よりも==NULLの方が重要ならifの中に >関数呼び出しを丸ごと入れたりなんてしないでしょ そうとは限らんよ。関数として見れば、関数が大事だし、 if文として見れば、条件が大事だ。 >人からコードを引き継いで改修箇所付近のコードを切れてるからって見ないなんて >そんな人のケアをする自信なんて、俺にはないな 改修するならしっかり読むが、さらっと目を通すだけという場合も有るだろ。 おっちょこちょいなやつは何処にでも居るもので、そういう奴が変な勘違いを起して、 面倒を起したら困る。 実際、このスレにも自分の反論しようとしている相手の文章すら、 まともに読まない奴が居るわけで。 んで、自分のミスなのに、「お前の書き方が悪い」と開き直る。 だから、自分から相手が読みミスらないような書き方をする必要が出てくる。 結局こっちにも火の粉は飛んでくるからね。
250 名前:デフォルトの名無しさん [2007/10/27(土) 05:05:45 ] 最高にド低脳な発言してください in ム版(XVII) 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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:09:05 ] >>250 ワロタ 自分で「ド低脳」って認めてどうするw
252 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:09:26 ] >>234 だから好きにやれば良いじゃん。 ウマいコードってのは、プロジェクトが停滞しづらいコードだろ。 逆にヘタなコードってのは、プロジェクトを停滞させるコードだろ。 あなたにウマいコードは必要ないじゃない。
253 名前:デフォルトの名無しさん [2007/10/27(土) 05:10:09 ] オチがついたところで、また明日。おやすみなさい。
254 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:11:08 ] >>239 は コンパイルエラー
255 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:13:27 ] >>242 違う。 この議論は前スレから永遠と続いている。 というか、このスレは今現在俺だけで持ってるようなものなんだけど、 前スレからの流れを見てもらえれば、俺が>>80 でないことは分かる。 物事への認識のレベルが違いすぎるからすぐ判るはず。
256 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:18:14 ] >>247 boolが無いから整数で代用しているんだろ。 >>247 の2行目に、 >boolを整数で代用している という文がちゃんと入ってるだろ。 単に整数値といっても、C言語の場合は、意味の上では、整数だったりboolだったりするから、 その辺は使い分けるべきだろ。 その程度の意識も無いのに、ウマいもヘタも無いね。 そういうやつは定数が左にきたぐらいでグダグダいう立場に無い。 糞食いながら、「しょんべんマズー」と言ってるようなものだ。
257 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 05:27:13 ] つーかもう今日は寝る。 返事はまた明日気が向いた時に返すかも。 今日は張り合い無かったなぁ。 if (!strcmp(str1, str2)) {} が 汚いって事すらもわからないような奴では、 ちょっと流石に相手にならないよ。 そういうやつが、他人のコードを綺麗汚いと、いきり立ってるのかと思うと、泣けてくるね。 身の程をわきまえるべき。 >>250 が >>125 をド低脳スレに貼ったらしいが、この始末どうつけるつもりなんだろうな。 他の右派(というか、単なるアンチ俺、もとい、暇つぶしの友)が可愛そうだ。
258 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 07:33:42 ] 変数左辺派による工作 ja.wikipedia.org/w/index.php?title=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E4%BD%9C%E6%B3%95&diff=15617960&oldid=13976161
260 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 07:38:41 ] 腹減った
261 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 07:43:11 ] >>257 >暇つぶしの友 他所でやれ脳足りん。
262 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 07:49:35 ] if (!strcmp(str1, str2)) {} は綺麗 *dst++ = *src++ と勝るとも劣らないくらい綺麗
263 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 07:50:41 ] while(*dst++ = *src++);
264 名前:デフォルトの名無しさん [2007/10/27(土) 08:24:17 ] 英語ができると、if (!strcmp を、if not string compare と読んでしまうので 等値性をテストしているとは認識しにくいな。 !をnotと読まない人は気にならないんだろうけど。
265 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 08:55:17 ] if (!strcmp(str1, str2)) {} の何がいけないのか分からない
266 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 08:56:01 ] if(str1 == str2) {} だろ上官
267 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 08:59:28 ] >>266 その発想は無かった
268 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 09:06:07 ] ・・・なんでこんなことを議論しているのかがよく判らない。
269 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 09:14:44 ] おまいらおはよう。未だに左定数の話をしていて正直がっかりだ。 >>169 賛同ありがとう。「簡単なことをこんなに難しく書くやつがいるんだぜ」「頭 痛いよなぁ」で済むと思ったら、予想外の展開になって別の意味で頭が痛かっ たよ。 >>171 皮肉? いや、いたってマジだぞ? だってソース見たとき本気で頭かかえたもの。 ちなみにこういうコードへの対策は、「10行以上書いたらレビューしろ。毎日 レビューしろ。動いてからレビューするな」以外に知らないんだ。(そういう 意味でペアプログラミングはすげー有用だと思うんだが、まだ実現できたこと がない) >>189 > の中で重要な処理をしているかもしれない。 それだったら「本質の抜粋」にならないでしょーが。 for文の中は、変数名と定数値以外、「そのまんま」だ。 違う点は、オリジナルはC++じゃなくてJavaなこと、関数(メソッド)のシグネチャ、 書いた処理の前にもコードがあること、最後のif文のブロックの中身。
270 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 09:39:00 ] >>269 補足しておくと、ここで言ってる「本質」とは、 「b-N<a≦b (a, b, Nは整数) を判定する、ただそれだけのために、大小比較じゃなくてループを使ってる」 ってことだと書けば理解してもらえるか?>>189
271 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 09:58:28 ] ぱっと見て「ヘタだなぁ」と思うスレ
272 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:06:30 ] くだらねー議論してんなぁ。 定数を左に置くか否かなんてとっくの昔に結論でてるだろうが。 >>196 のような例外を除いて定数を左において可読性落としたり、 スクロールしないと全部が見渡せないような条件式なんか書くな。 コンパイラが警告出さない時の数十年前に編み出された小手先を 未だに神の一手が如く崇拝してんじゃねぇよ、ボケ。 これを知ってる俺って技術力たけぇなんて思ってたかもしれんが、 ド低脳の証明だ。玉石混交の石のほうだ、カス。
273 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:14:14 ] おまえら、何度も同じことをくりかえすならfor文の中にでも入れとけよ
274 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:21:53 ] >275 if文の中身間違えてない?
277 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 10:30:11 ] >>269 あまりにもスレタイトルに沿ったコードだったからレスつけるまでもないと思った。
278 名前:デフォルトの名無しさん mailto:sage [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
279 名前:276 mailto:sage [2007/10/27(土) 10:55:07 ] 間違った;ごめん
280 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:02:33 ] >>278 cl は /W4 で使うもんだ。 gcc は最低でも -Wall で使うもんだ。
281 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:11:33 ] おれ定数左派だけど定数を左におく場合の欠点って何? 可読性落ちる? でも落ちるか? 慣れてないとえっ?って思うかもしれないけど別にそれぐらい大丈夫でしょ。 javaでも "hoge".equal(var); ってイディオムあるぐらいだし。 lintなんて毎回通さないし、コンパイラの警告も丸カッコついてるとスルーされるし。 (論理式で繋がってたり、マクロが絡んだりすると丸カッコつく場合があるよね) あとたまたま警告を見過ごしてオブジェクトファイルになってしまうと、次にファイル更新しないと警告でないよね。 おれ注意散漫だから1年に2、3度ぐらいは==と=の間違いやってしまうけど定数左のおかげで早期発見できてるよ。 もちろん定数右でもコンパイラの警告で見つかってるかもしれないけど 定数左にして損はなしと思うから昔から今までずっとそのスタイル。
282 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:16:37 BE:789120656-2BP(125)] ソースファイル内でそのスタイルで統一されてるなら、別に定数が右だろうが 左だろうが、個人の好みだからいいと思うけどなあ。 会社とかで、規約がちゃんとある場合は別で。
283 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:25:11 BE:1473024487-2BP(125)] gccも-Wallつけないと警告でないね。 まあ、普通は付けてると思うけど。
285 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:37:51 ] >>282 スタイルには単に好みの問題と、実際にメリットのあるものとがある。 前者は ifの条件式の後に中カッコつけるか、改行してからつけるか、など。 後者はif のあとには必ず中カッコをつける、など。 定数左は後者だと思う。(可読性に問題はないと思うので)
286 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 11:52:10 ] >>282 「統一されてればいい」ってことなら、あえて少数派のスタイルを選ぶことはないんじゃないの? >>72
287 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:10:59 BE:526080454-2BP(125)] >>285 定数左は確かに代入によるバグを防げるときもあるけど、 その反面、慣れないとぱっと見てわかりづらいよね? 例えば、代入文は x = 0; などと書くわけで、大抵の文は左から右に読んでいく。 そして、定数は右にある。これへの慣れが強いので、 if(0 == x)などと書かれると、ここで思考が停止してしまう。 ソースコードの理解しやすさ(可読性?)も考えると、トレードオフで どちらを選ぶかは個人の趣味レベルになるのかなあと。 上で議論されてるように、コンパイラとかで容易にチェックできるわけだし。
288 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:12:39 ] コーディングスタイルに拘りすぎる奴はヘタクソ コーディングスタイル論争に突入する奴はさらにヘタクソ
289 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:15:18 BE:1262592386-2BP(125)] >>286 少数派ではあるけれども、>>285 の言うようにチェッカとかを使わなくても ミスに気づくことができるという利点があるので選ぶんだろうね。 ちなみに漏れは定数は右派。 右におくソースがほとんどだし、慣れてるし。 漏れが見たオープンソースなソフトウェアのソースは定数が右にあった。 もし、定数が左にあることにもっと優位な点があるなら、とっくに ほとんどのソースが定数左になってると思うんだけど、いかがだろう。
290 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:49:32 ] とヘタクソ厨がもうしております
291 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:57:03 ] >>281 主語と目的語の区別がつかないアホには 自然言語からやり直せといいたい。
292 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 13:05:06 ] 読む分にはどっちでもいい。何の違いもない。 書くときはsubject == compareの方が流れ的に書きやすい。
293 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 13:50:50 ] 288の書いたコードは汚そうだな。
294 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 14:31:10 ] if(*dst++ = *src++){ hogehoge } みたいなとき警告でないようにしたいのですが
296 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 14:33:15 ] if((*dst++ = *src++) != 0){
297 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 15:11:01 ] もうね、コーディングスタイルスレでも立ててそこでやれと
298 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 15:41:35 ] わかったから月曜になったらちゃんとハロワ池よ
300 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:05:07 ] できる奴ほどスタイルにこだわる
303 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:14:56 ] 大きいほうを右に配置したいし、常にそうするから、 結果的に不等号の「>」は不要だと思うんだよなぁ。 勿論、流儀の問題でぶつかったりする心配はあるけど、 そうじゃなくて自分ひとりで「>」無しでやっていくうえで、 どうしてもでてくる不都合ってあるのかな? 「<」じゃ困ってしまうような事態があるのかな? チラシの裏にでも書いておけって? すまんね。
304 名前:デフォルトの名無しさん [2007/10/27(土) 16:31:17 ] だれか、288を日本語に翻訳してくれ。 で、実際のところ、定数は左に置けとか頑張ってるのって、一人だけだろ?
305 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:26:57 ] >>301 それは「定数を左辺に」と主張している派の本質と話題をそらせて釣りだと思うけど
306 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:28:27 ] ぱっと見て「バカだなぁ」と思うコード
307 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:09:07 ] スレスピードがきもいよお前ら
308 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:14:17 ] いまム板で一番勢いがあるスレだぜここは
309 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:15:40 ] 昨夜から今朝にかけての速度はもう、ある種の祭りだった。