Работает ли `break` только для` for`, `while`,` do-while`, `switch 'и для` if` операторов?
Предположим, что в цикле for
есть оператор if
:
for( ; ; )
{
if( )
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
Теперь, оператор break
заставит компилятор выйти из цикла for
или он выйдет только из тела if
после выполнения условия в if
?
Ответы
Ответ 1
Оператор break
вырывается из ближайшего охватывающего оператора цикла или оператора.
break
не выходит из оператора if
, а ближайшего loop
или switch
, который содержит этот оператор if
. Причиной не выходить из оператора if
является то, что он обычно используется, чтобы решить, хотите ли вы выйти из loop
.
Интересно, что телефонный коммутатор плохо себя ведет, потому что компания, которая изобрела C сделала именно эту ошибку. Они хотели вырваться из инструкции if
, и они забыли, что она выйдет из всего оператора for
.
Ответ 2
Он вырвется из цикла for
. Оператор break
влияет только на циклы (do
, for
, while
) и switch
(для выхода из case
).
Из C99 standard, раздел 6.8.6.3:
Ограничения
Оператор break должен появляться только в теле коммутатора или в теле цикла или в теле цикла.
Семантика
Оператор break прекращает выполнение самого маленького закрывающего переключателя или итерации.
Ответ 3
break
не будет выходить из предложения if, но ближайший цикл или предложение switch. Кроме того, предложение if не называется "циклом", потому что оно никогда не повторяет его содержимое.
Ответ 4
Оператор break действует только на циклы и предложение switch. В любом случае он выйдет из ближайшего замкнутого контура. Хорошей практикой является использование условного перерыва, т.е. Разрыв, заключенный в оператор if. Если вы хотите выйти из всех циклов или цикла, вы можете использовать инструкцию goto. Например:
while(true) {
while (some_condition) {
if (some_condition)
goto label;
}
}
label: // do something here
Ответ 5
Оператор break не будет нарушать оператор if или else. если вы используете оператор break, он в основном выходит из ближайшего цикла (цикл for, цикл loop, цикл while и переключатель case)
Ответ 6
Оператор перерыва не имеет смысла при принятии решений. Он используется только в циклах, когда вы хотите принудительно завершить цикл и продолжить выполнение с оператора, следующего за циклом. Там нет вопроса "оператор break будет заставлять элемент управления выходить из оператора if, если условие истинно", потому что независимо от оператора break в любом случае элемент управления выйдет из оператора if, если условие истинно, и когда его тело будет казнены. Оператор if не является циклом. оно либо не выполняется вообще, либо выполняется только один раз. Так что абсолютно бессмысленно ставить перерыв в теле if.