if
ループ内にfor
ステートメントがあるとします。
for( ; ; )
{
if( )
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
これで、break
ステートメントによってコンパイラがfor
ループから抜け出すか、if
の本体から抜け出すのは、if
は満たされますか?
break
ステートメントは、最も近い囲みloopまたはから抜け出します。 switchステートメント。
break
はif
ステートメントから抜け出しませんが、そのloop
ステートメントを含む最も近いswitch
またはif
から抜け出します。 if
ステートメントから抜け出さない理由は、loop
から抜け出すかどうかを決定するために一般的に使用されるためです。
興味深いことに、電話交換機は、Cを発明した会社 まさにこのバグを作った であるため、誤動作していました。彼らはif
ステートメントから抜け出したかったのですが、for
ステートメント全体から抜け出すことを忘れていました。
for
ループから抜け出します。 break
ステートメントは、ループ(do
、for
、while
)およびswitch
ステートメント(aから抜け出すため)にのみ効果があります。 case
)。
C99標準 のセクション6.8.6.3から:
制約
Breakステートメントは、スイッチ本体またはループ本体内でのみ、またはそれらとして表示されます。
セマンティクス
Breakステートメントは、それを囲む最小のswitchまたは反復ステートメントの実行を終了します。
break
はif句から抜け出すのではなく、最も近いループまたはswitch句から抜け出します。また、if節はその内容を繰り返さないため、「ループ」と呼ばれません。
Breakステートメントは、ループとswitch句でのみ有効です。いずれにせよ、それは最も近い包囲ループから出てきます。条件付きブレーク、つまりifステートメントで囲まれたブレークを使用することをお勧めします。すべてのループまたは一部のループから抜け出すには、gotoステートメントを使用できます。例えば:
while(true) {
while (some_condition) {
if (some_condition)
goto label;
}
}
label: // do something here
Breakステートメントは、ifまたはelseステートメントを中断しません。 breakステートメントを使用している場合、主に最も近いループから出てきます(forループ、whileループ、do whileループ、caseの切り替え)