スイッチ内からループを終了するための代替アプローチ
特定のシナリオでは、内側から囲んでいるループを終了する必要が生じる場合があります。 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 サイトの他の関連記事を参照してください。