2016-09-19 3 views
8

if節が多く、前​​のエラーでコードの実行が分かりにくい場合は、これに1サイクルのループを使用できますか?単に休憩でブロックを終了することができるために?このよう :ループをgotoとして「乱用する」のが一般的なのですか

do { 
    //..code 
    if (error1) break; 
    //..code 
    if (errorN) break; 
    //do finally something when no errors before 
} while (false); 
+3

これは非常に一般的です。 –

+2

「類似の」質問:http://stackoverflow.com/questions/18507518/what-are-some-better-ways-to-avoid-the-do-while0-hack-in-c – stefaanv

+2

理論的には(そして周囲の変数に依存して)、関数内で折り返して改行する代わりに「戻る」こともできます。しかし、この種の場合でも同じ結果になるでしょう:スコープを離れてください。 – Hayt

答えて

7

ループがdowhileのループで使用されていなかったとしても、これは慣用的です。 Linuxカーネルのソースコードはこれを利用しています。

これについてはっきりしないことはありません。while(false)は、スズのことを正確に示しています。

+1

Linuxカーネルに言及していただきありがとうございます! –

+0

このようなテクニックの利点は、 '!エラー 'と' if'ブロックの中でコードを実行する? –

+2

それでは、スコープ内で適切な 'error'を持つ必要があります。' if'には 'break'がありません。 – Bathsheba

3

は、はい、それは、共通の深いネストを避けるための技術、およびgoto;に実際に望ましいのです。

gotoよりも読みやすさの点からです。ループのスコープとコードフローは明確に定義されているため、必ずしも下に表示されないgotoステートメントの対応するラベルをルックアップする必要はありません。

+1

Gotoにはなぜ好ましいですか?まったく同じ効果がありませんか? – user463035818

+2

@ tobi303これは範囲を保証し、より読みやすくなります。 'goto'ステートメントでは、対応するラベルを検索しなければなりません(ステートメントの下に必ず現れるとは限りません)。 –

+2

@ tobi303(完全に合法的な)キーワード「goto」は、常に宗教的戦争を開始する危険性があると言います。それは、人間の心の中に入っていく伝染的な教義の一つです。 –

関連する問題