Работает ли `break` только для операторов` for`, `while`,` do-while`, `switch 'и для операторов` if`? - PullRequest
32 голосов
/ 02 апреля 2010

Предположим, у меня есть оператор if внутри цикла for:

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

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

Теперь, оператор break заставит компилятор выйти из цикла for или он выйдет только из тела if, как только условие в if будет выполнено?

Ответы [ 6 ]

77 голосов
/ 02 апреля 2010

Оператор break выходит за пределы ближайшего включающего цикла или switch оператора .

break не прерывается из оператора if, но ближайший loop или switch, который содержит этот оператор if. Причина того, что оператор if не вышел из строя, заключается в том, что он обычно используется для определения того, хотите ли вы выйти из loop.

.

Интересно, что телефонный коммутатор плохо себя вел, потому что компания, которая изобрела C , сделала именно эту ошибку . Они хотели вырваться из оператора if и забыли, что он вырвется из всего оператора for.

19 голосов
/ 02 апреля 2010

Это вырвется из цикла for. Оператор break влияет только на циклы (do, for, while) и switch (для выхода из case).

Из C99 стандарта , раздел 6.8.6.3:

Ограничения

Оператор прерывания должен появляться только в теле переключателя или в теле цикла или в нем.

Семантика

Оператор break завершает выполнение самого маленького включающего переключателя или итерационный оператор.

14 голосов
/ 02 апреля 2010

break выйдет не из условия if, а из ближайшего цикла или предложения switch Кроме того, предложение if не называется «циклом», поскольку оно никогда не повторяет своего содержимого.

2 голосов
/ 26 февраля 2015

Оператор Break вступает в силу только для циклов и предложения switch. В любом случае он выйдет из ближайшего замкнутого контура. Хорошей практикой является использование условного разрыва, то есть разрыва, заключенного в некоторые операторы if. Если вы хотите выйти из всех циклов или некоторого цикла, вы можете использовать оператор goto. Например:

while(true) {
     while (some_condition) {
          if (some_condition)
               goto label;
     }
}
label: // do something here
0 голосов
/ 09 апреля 2019

Оператор break не будет прерывать оператор if или else. если вы используете оператор break, он в основном выходит из ближайшего цикла (для цикла, во время цикла, для цикла пока и переключателя)

0 голосов
/ 05 мая 2018

Оператор перерыва не имеет смысла при принятии решений. Он используется только в циклах, когда вы хотите принудительно завершить цикл и продолжить выполнение с оператора, следующего за циклом. Нет никаких сомнений в том, что «оператор break будет вызывать выход элемента управления из условия if, если условие истинно», поскольку независимо от оператора break в любом случае элемент управления выйдет из оператора if, если условие выполнено, и когда его тело будет казнены. Оператор if не является циклом. оно либо не выполняется вообще, либо выполняется только один раз. Поэтому абсолютно бессмысленно ставить разрыв внутри тела if.

...