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:格好つけずに括弧つけろよ (スコア: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でネストして書くの少数派だから。
それ前提で語っても誰も付いていけないよ