break
ステートメントにラベルを付けることも、ラベルを付けることもできないJavaの場合と同様に、同等の処理または同じ処理を実行するCのステートメントがありますか?Cにラベル付きまたはラベルなしのブレークがありますか?
答えて
いいえ、Javaのようなラベル付きのブレーク文はありません。 しかし、同様の効果を得るにはgoto
文を使用することができます。ちょうどあなたが実際に終了したいループの後にラベルを宣言し、あなたはJavaでラベルされたブレークを使用しているだろうgoto
を使用します。
int main() {
for (int i=0; i<100; i++) {
switch(i) {
case 0: printf("just started\n"); break;
case 10: printf("reached 10\n"); break;
case 20: printf("reached 20; exiting loop.\n"); goto afterForLoop;
case 30: printf("Will never be reached."); break;
}
}
afterForLoop:
printf("first statement after for-loop.");
return 0;
}
出力:
just started
reached 10
reached 20; exiting loop.
first statement after for-loop.
注ことDijkstras有名なので、この文は多くの場合、if
またはwhile
のような制御構造よりもはるかに複雑であるため、コンピュータの科学者はコードからgoto
文を禁止するために懸命に戦ってきました。だからあなたがしていることを意識して、それを賢明に使う(=まれに)。
gotoのこの例は、ラベル付きのbreak/continueを使ったJava-spaghettiプログラミングよりもはるかに明確です。彼らは言語でgotoを実装することを拒否し、その後gotoよりも10倍悪いことを考え出す... – Lundin
いいえ、Cにそのようなものはありませんが、Javaには存在しないgoto
がありますが、私は同じ方法で使用できると思われます。
それは理解するコードが必要以上に硬くなり、代わりにgoto
のオプションが常にあるので、それはフロー制御にgoto
を使用することが推奨されていないが、goto
が最もエレガント可能な解決策であるが、いくつかのケースがありますが、これらのケースでは、ラベル付きブレークとして使用することは除外されます。
同様の結果を達成するための良い方法は、実際にはよりクリーンで簡単です。関数を書くことです。あなたはいつでも関数からいつでも戻ることができます。これはbreakが実際に行うことと同等です。これはもちろん、機能がないのでJavaの方が複雑であり、構造体は慣用的ではありませんが、goto
を使用してをエミュレートする場合は、cには改行がありません。
方法はちょっとねじれているでしょう。ラベル付きブロックを破る代わりに、ブロック外のラベルにジャンプします。 @EugeneSh。 –
。はい、まさにこのラベルは別の場所にあります。 –
- 1. C#またはFortran 95ループでラベル付きブレーク/継続を実行しますか?
- 2. chartjsラベルが動作しないようにラベルを貼り付けます
- 3. ラベル付きブレークをJavaで使用するのは良い方法ですか?
- 4. IOS:ラベルに問題があります
- 5. scikit-learnのラベル付きkfoldクロスバリデーションと同等のR /キャレットがありますか?
- 6. なぜ私のラベルに `cut`オブジェクトがありますか?
- 7. HighChartsファネル(ラベルの代わりに中央のラベルが付いています)
- 8. ラベル付きブレークを使用すると、Javaで「未定義ラベル」エラーが発生する
- 9. 凡例付きのラジオボタンのグループにラベルを付ける - フィールドセットを折り返す必要がありますか?
- 10. バープロットにラベルがありません
- 11. eclipseナビゲータ・パネルのフォルダに「タグ付け」、「フラグ」または「ラベル付け」する方法はありますか?
- 12. ノードの関係を維持したままラベルの名前を変更し、ラベルを別のラベルにマージする方法はありますか?
- 13. ラベル(またはスパン)がフェードアウトしない?
- 14. Haskell - ラベル付きセットパーティションには何を使用しますか?
- 15. ラベル付きコントロールを使用した場合の位置ラベル
- 16. ラベル付きプログレスバー - ProgressChangedでラベルを更新できません
- 17. 上付きラベル
- 18. リーフレットクラスタマーカー(ラベル付き)
- 19. ラベル付きテキストボックス
- 20. ラベル付きスタックバーチャート
- 21. ユーザーコントロールテキストボックス(ラベル付き)
- 22. 引数のラベルがありません
- 23. C#のラベルのテキストがつまった
- 24. ラベルをクラスなしでフレームに貼り付けます
- 25. スライダー付きD3グラフもラベルを追加する必要があります
- 26. Kivy:ラベルには別の位置に矩形があります
- 27. ボタンとラベルがありません
- 28. フォームフィールドの代わりにラベルにブートストラップのフィードバックアイコンがあります
- 29. WinForms:ラベルをテキストボックスに関連付ける概念はありますか?
- 30. ラベル付きGoogleマップサークル
しかし、Javaにはないgotoがあります。 – rustyx
あなたは 'break'ステートメントをラベルなしブレークとみなし、' goto'を拡張ラベル付きブレーキと考えることができます。 – Serge
@Antony Nepgen Javaのラベル付きbreak文は、言語の作者によるプログラミングの悪いスタイルのデモンストレーションです。 –