web-dev-qa-db-ja.com

「break」は「for」、「while」、「do-while」、「switch」、および「if」ステートメントに対してのみ機能しますか?

ifループ内にforステートメントがあるとします。

for( ; ; )
{
  if( )
    {
     printf(" inside if");
     break;
    }//if         

  printf("inside for");
}//for

これで、breakステートメントによってコンパイラがforループから抜け出すか、ifの本体から抜け出すのは、ifは満たされますか?

33
avi

breakステートメントは、最も近い囲みloopまたはから抜け出します。 switchステートメント

breakifステートメントから抜け出しませんが、そのloopステートメントを含む最も近いswitchまたはifから抜け出します。 ifステートメントから抜け出さない理由は、loopから抜け出すかどうかを決定するために一般的に使用されるためです。

興味深いことに、電話交換機は、Cを発明した会社 まさにこのバグを作った であるため、誤動作していました。彼らはifステートメントから抜け出したかったのですが、forステートメント全体から抜け出すことを忘れていました。

79

forループから抜け出します。 breakステートメントは、ループ(doforwhile)およびswitchステートメント(aから抜け出すため)にのみ効果があります。 case)。

C99標準 のセクション6.8.6.3から:

制約

Breakステートメントは、スイッチ本体またはループ本体内でのみ、またはそれらとして表示されます。

セマンティクス

Breakステートメントは、それを囲む最小のswitchまたは反復ステートメントの実行を終了します。

19
Mark Byers

breakはif句から抜け出すのではなく、最も近いループまたはswitch句から抜け出します。また、if節はその内容を繰り返さないため、「ループ」と呼ばれません。

14
Matti Virkkunen

Breakステートメントは、ループとswitch句でのみ有効です。いずれにせよ、それは最も近い包囲ループから出てきます。条件付きブレーク、つまりifステートメントで囲まれたブレークを使用することをお勧めします。すべてのループまたは一部のループから抜け出すには、gotoステートメントを使用できます。例えば:

while(true) {
     while (some_condition) {
          if (some_condition)
               goto label;
     }
}
label: // do something here
2
The joker

Breakステートメントは、ifまたはelseステートメントを中断しません。 breakステートメントを使用している場合、主に最も近いループから出てきます(forループ、whileループ、do whileループ、caseの切り替え)

0
Gaurav Kumar