假设我在if
循环中有一个for
语句:
for( ; ; )
{
if( )
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
现在,break
语句是否会导致编译器退出for
循环,或者只有if
中的条件才会出现if
变得满意?
答案 0 :(得分:77)
break
语句突破最近的封闭循环或开关语句。
break
不会突破if
语句,而是包含该loop
语句的最近的switch
或if
。不打破if
语句的原因是因为它通常用于决定是否要突破loop
。
有趣的是,由于发明了C made exactly this bug的公司,电话交换机行为不端。他们想要打破if
声明,他们忘记了它会突破整个for
声明。
答案 1 :(得分:19)
它会突破for
循环。 break
语句仅对循环(do
,for
,while
)和switch
语句产生影响(用于突破case
)。
来自C99 standard,第6.8.6.3节:
<强>约束强>
break语句只能出现在开关体或循环体中。
<强>语义强>
break语句终止执行最小的封闭开关 或迭代声明。
答案 2 :(得分:14)
break
不会突破if子句,而是最近的循环或switch子句。此外,if子句不称为“循环”,因为它从不重复其内容。
答案 3 :(得分:2)
Break语句仅对循环和switch子句生效。无论如何,它将从最近的封闭循环中出来。使用条件中断即一些if语句包含的中断是一种很好的做法。如果你想要从所有循环或一些循环中出来,你可以使用goto语句。例如:
while(true) {
while (some_condition) {
if (some_condition)
goto label;
}
}
label: // do something here
答案 4 :(得分:0)
中断语句不会中断任何if或else语句。如果您使用break语句,则它主要来自最近的循环(for循环,while循环,while循环和切换大小写)
答案 5 :(得分:-1)
break语句在决策制作声明中没有用处。它只在循环中使用,当你想强制终止循环并从循环后的语句继续执行时。毫无疑问,“如果条件为真,则会断开语句导致控制从if语句中出来”,因为无论break语句如何,如果条件为真,并且其主体是执行。 if语句不是循环。它要么根本不被执行,要么只被执行一次。因此,在if的主体中放置一个绝对是没有意义的。