假设,我在循环中有一个if
语句:for
for( ; ; )
{
if( )
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
现在,该break
语句会导致编译器退出for
循环,还是只会if
在满足条件后才退出循环体if
?
该break
语句跳出最近的封闭循环或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 语句应仅出现在或作为 switch 主体或循环主体出现。
语义
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 循环和 switch case)
break 语句在决策语句中没有用处。它仅在循环中使用,当您想要强制终止循环并从循环后面的语句继续执行时。不存在“如果条件为真,将 break 语句导致控件从 if 语句中出来”的问题,因为不管 break 语句如何,如果条件为真并且一旦它的主体为执行。if 语句不是循环。它要么根本不执行,要么只执行一次。因此,在 if 的主体中放置一个 break 绝对没有意义。