ホームページ >バックエンド開発 >C++ >C の Switch ステートメント内からループを終了する方法: `goto` またはフラグを使用しますか?

C の Switch ステートメント内からループを終了する方法: `goto` またはフラグを使用しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 02:41:30785ブラウズ

How to Exit a Loop from Within a Switch Statement in C  : Using `goto` or a Flag?

スイッチ内からループを終了するための代替アプローチ

特定のシナリオでは、内側から囲んでいるループを終了する必要が生じる場合があります。 switch ステートメント。フラグを使用するのが一般的なアプローチですが、C では goto ステートメントを使用するという代替ソリューションが提供されています。

ジレンマ:

次のコード スニペットを考えてみましょう:

<code class="cpp">while(true) {
    switch(msg->state) {
    case MSGTYPE: // ...
        break;
    // ... more stuff ...
    case DONE:
        // **HERE, I want to break out of the loop itself**
    }
}</code>

目標は、msg->state が DONE に等しいときにループを直ちに終了することです。

goto:

C を使用すると、 goto ステートメントを使用して、コード内の特定の場所に明示的にジャンプします。これを利用して、目的の動作を実現できます。

<code class="cpp">while ( ... ) {
    switch( ... ) {
     case ...:
         goto exit_loop;  // Jump to this location when msg->state is DONE

   }
}

exit_loop: ;  // Label for jump target</code>

この変更されたコードでは、msg->state が DONE に等しい場合、goto ステートメントは実行フローを exit_loop ラベルに送ります。これにより、スイッチとそれを囲んでいるループの両方が終了します。

注: goto ステートメントのターゲットを識別するには、ラベル (:) を使用することが重要です。 goto を無差別に使用すると、スパゲッティ コードや保守性の問題が発生する可能性があります。

以上がC の Switch ステートメント内からループを終了する方法: `goto` またはフラグを使用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。