35

假设,我在循环中有一个if语句:for

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

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

现在,该break语句会导致编译器退出for循环,还是只会if在满足条件后才退出循环体if

4

6 回答 6

84

break语句跳出最近的封闭循环switch语句

break不脱离if语句,而是最接近的loopswitch包含该语句的if语句。不突破if语句的原因是因为它通常用于决定是否要突破loop.

有趣的是,电话交换机的行为异常,因为发明 C 的公司正是制造了这个错误。他们想突破一个if声明,却忘记了它会突破整个for声明。

于 2010-04-02T08:13:45.620 回答
20

它会跳出for循环。break语句仅对循环(do, for, while)和switch语句(用于中断 a )有影响case

C99 标准,第 6.8.6.3 节:

约束

break 语句应仅出现在或作为 switch 主体或循环主体出现。

语义

break 语句终止执行最小的封闭 switch 或迭代语句。

于 2010-04-02T08:10:40.230 回答
15

break不会跳出 if 子句,而是最近的循环或 switch 子句。此外,if 子句不称为“循环”,因为它从不重复其内容。

于 2010-04-02T08:11:26.930 回答
3

Break 语句仅对循环和 switch 子句生效。在任何情况下,它都会从最近的封闭循环中出来。使用条件中断是一个很好的做法,即被一些 if 语句包围的中断。如果您想退出所有循环或某个循环,您可以使用 goto 语句。例如:

while(true) {
     while (some_condition) {
          if (some_condition)
               goto label;
     }
}
label: // do something here
于 2015-02-26T05:04:21.507 回答
0

Break 语句不会破坏任何 if 或 else 语句。如果您使用的是 break 语句,它主要来自最近的循环(for 循环、while 循环、do while 循环和 switch case)

于 2019-04-09T03:18:40.297 回答
-1

break 语句在决策语句中没有用处。它仅在循环中使用,当您想要强制终止循环并从循环后面的语句继续执行时。不存在“如果条件为真,将 break 语句导致控件从 if 语句中出来”的问题,因为不管 break 语句如何,如果条件为真并且一旦它的主体为执行。if 语句不是循环。它要么根本不执行,要么只执行一次。因此,在 if 的主体中放置一个 break 绝对没有意义。

于 2018-05-05T07:42:39.863 回答