elifは飾りじゃないのよって事 if (~!=0);else if (~!=0)~else if (~!=0);else{/*success*/}/*failure*/;return err; if (~!=0);else{ if (~!=0)~else{ if (~!=0);else{/*success*/}}}}}}…}/*failure*/;return err; この様に括弧を付けると先の条件文が/*success*/が終り閉じ括弧を見つけるまで確定しない。 10個過ぎ辺りで規格上の入れ子限界 100個過ぎ辺りでブロック文が規格上の入れ子限界&「いい加減にしなさい条件文重ねすぎ!」とギブアップ宣言するコンパイラも
格好つけずに括弧つけろよ (スコア:5, おもしろおかしい)
処理が1行だからといって、if文で格好つけるのはやめましょう。
Re:格好つけずに括弧つけろよ (スコア:2)
lisp神の守護を受けていればこんな事にはならなかった
C/C++はBSD/オールマン・スタイルで書いてます
Re:格好つけずに括弧つけろよ (スコア:1)
Python教徒がアップを始めました
Re: (スコア:0)
ABC: なんでアイツばかり取り上げられるんだっ!
Re: (スコア:0)
elifですね。
Re: (スコア:0)
ソースコード整形機能ないのかな?
Re: (スコア:0)
整形?
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
こういうことか?
Re:格好つけずに括弧つけろよ (スコア:1)
意図と違ったコードになってることには気づきやすい!はず!
# ちょっとだけ必死
Re: (スコア:0)
段落きっちりするだけで見つかるミスって結構あるよね。SQLとか。
Re: (スコア:0)
括弧の有無でパーサが限界に達したりするから簡単な問題じゃないんだよ
if(~!=0);else if(~!=0)~if(~!=0);else{/*SUCCESS*/}/*FAILURE*/;return err;
みたいなの
Re:格好つけずに括弧つけろよ (スコア:2)
もしかして:括弧 というより、『gotoなしで else if連鎖にすると』の間違い? コード例的に。
Re: (スコア:0)
どういうことかさっぱりわからないんだけど、だれか解説よろ
Re: (スコア:0)
以下のプログラムのPOINT2は絶対に実行されない。
fuga() {
OSError err;
if (err = hoge()) goto fail; /* POINT1 */
goto fail;
if (err = hoge()) goto fail; /* POINT2 */
fail:
return err;
}
つまり、誤ったインデントを付けたから
余計に見つけ辛くなったのね
Re:格好つけずに括弧つけろよ (スコア:2)
> 以下のプログラムのPOINT2は絶対に実行されない。
それは誰でもわかってるだろ。
#2550906のプログラムと違うだろう。
Re: (スコア:0)
括弧があるかないかでパーサが限界に達したりするから難しいんだよ
Re: (スコア:0)
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
goto fail;
を
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
{
goto fail;
}
にしちゃいけない理由なのか?
Re:格好つけずに括弧つけろよ (スコア:1)
条件式の後に単文を実行する場合はブレースを付けないコーディング規約なのかも知れません。
私はかつて、最初にプログラマとして勤めた職場が「ブレース省略禁止」で叩き込まれたこともあり、ブレース省略の利点がさっぱりわからない(こういうバグを生む)のですが、なぜか「単文ではブレース省略」とする規約は見たことがあります。
Re:格好つけずに括弧つけろよ (スコア:2)
不要なコードは書くな主義かな。
ソースコードのサイズを制限したいとか
#そういう時代もあったんです
あるいはK&Rスタイルに沿っているつもりとか。
単文にはそもそも中括弧は不要だからでしょう。
つまり「省略」じゃない。
Syntax Sugarの一種で水増しだといわれても仕方がない面があるから。
IFの実行部は必ずブロックにしろ、単文は使うなってのは30年以上前から言われてますけどね。
Re: (スコア:0)
一般論としては、言語のある機能を使わずすますために、
冗長な記述を毎回繰り返すことは、
ダメプログラマーの典型的な行動なので、
ブレースは省略すべきということになる。
ただし、ブレースの省略に関していえば、
ミスが発生しやすいことが過去の多くの例で立証され続けているので、
そろそろ例外と断定してもいいだろう。
他に例外になりそうなものを挙げるとすれば三項演算子や再帰などがあるが、
これについては賛否両論の段階だろう。
Re: (スコア:0)
自動整形機能を使っていればほとんど問題にならないんだよね。
emacsを使って書かれたコードとかは括弧を省略しているのが多かった。
今でもVisual Studioならば文法上正しいインデントにされますね。
そういう機能を持たないエディタで書かれたコードのインデントがおかしいな
と思ったときは全体を一括整形してチェックしたりもします。
Re: (スコア:0)
???
Re: (スコア:0)
どのエディタだと、何段階でアウトになるのかよろ。
#OSXで動くものにしてね。
Re: (スコア:0)
elifは飾りじゃないのよって事
if (~!=0);else if (~!=0)~else if (~!=0);else{/*success*/}/*failure*/;return err;
if (~!=0);else{ if (~!=0)~else{ if (~!=0);else{/*success*/}}}}}}…}/*failure*/;return err;
この様に括弧を付けると先の条件文が/*success*/が終り閉じ括弧を見つけるまで確定しない。
10個過ぎ辺りで規格上の入れ子限界
100個過ぎ辺りでブロック文が規格上の入れ子限界&「いい加減にしなさい条件文重ねすぎ!」とギブアップ宣言するコンパイラも
プリプロセッサのelifの場合はendif乱打を防ぐ飾りかもしれんし
括弧付けてな
Re: (スコア:0)
いや、お前みたいにelse ifをelseでネストして書くの少数派だから。
それ前提で語っても誰も付いていけないよ
Re: (スコア:0)
戻り値がboolだから条件判断を省略するとか、整数を左に記述するとか、イミフなのも禁止してほしい。
Re:格好つけずに括弧つけろよ (スコア:1)
> 戻り値がboolだから条件判断を省略するとか
いやむしろそれは正しい気がする。
逆に条件句で整数が入るケースが気色悪い。
if(1) みたいな。
Re:格好つけずに括弧つけろよ (スコア:2)
K&Rから入ったせいか(i != 0)を(i)と書かないと冗長に見えて落ち着かないんです。
Re:格好つけずに括弧つけろよ (スコア:1)
↑は多用するけど、
↑はあまり好きじゃないです。
他人が書いてるのは見て見ぬふりをするけど、自分で書くときは前者のスタイルで書きます。
Re:格好つけずに括弧つけろよ (スコア:1)
私なら何を判定しているのか自分以外(未来の自分含む)の人にもすぐ理解してもらうために省略せず後者の書き方をします。
Re: (スコア:0)
私には!pのほうがp==NULLよりわかりやすいです
Re: (スコア:0)
私の場合、 if の中身は論理値にしておく方が好みで、ポインタそのものは論理値じゃないから NULL と比較した結果とすることで論理値にする方が好み。よって後者。
Re: (スコア:0)
整数を左にするのは==と=を間違えた時に有用だからいいんじゃないかな
Re: (スコア:0)
片方が定数でないと意味が無いので、これで救われるケースはそれほど多くない上に、
最近のコンパイラなら警告を出してくれるので、どれほど意味があるか疑問。
Re: (スコア:0)
片方が数値でかつ、(意識してわざわざ)数値を左にしたけど、==を=に間違うケースだけ救われる。
結構レアケースでないかな
Re: (スコア:0)
if (b) {
}
オーケー、省略はよくない。条件判断を追加しよう
if (b==true) {
}
だがちょっと待ってほしい。b==trueの型はboolではないか。省略せず条件判断を行うべきだ。
if ((b==true)==true) {
}
いやいや、(b==true)==trueの型もboolだ。条件判断を省略するのはよくない。
if (((b==true)==true)==true) {
}
(…以下無限に続く)
# マジな話「boolだから条件判断を省略」ってまったく意味わからないんですけど。