想,我有一个if
语句for
循环中:`break`是否仅用于for,while,do-while,switch和if语句?
for(; ;)
{
if()
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
现在,将break
声明会导致编译出来的for
循环或将它只能出现在身体的出if
一次if
中的条件变得满足了吗?
想,我有一个if
语句for
循环中:`break`是否仅用于for,while,do-while,switch和if语句?
for(; ;)
{
if()
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
现在,将break
声明会导致编译出来的for
循环或将它只能出现在身体的出if
一次if
中的条件变得满足了吗?
的break
声明跳出了最近的封闭循环或开关声明。
break
没有打出去的if
声明的,但最近的loop
或switch
包含if
声明。不破坏if
声明的原因是因为它通常用于决定是否要跳出loop
。
有趣的是,电话交换机因为发明了C made exactly this bug的公司而变得不合时宜。他们想摆脱if
声明,他们忘记了它会突破整个for
声明。
它将跳出for
循环。 A break
声明仅对环路(do
,for
,while
)和switch
语句(用于突破case
)有影响。
从C99 standard,部分6.8.6.3:
约束
break语句应仅在或作为开关体或循环体出现。
语义
break语句终止最小包围开关 或循环语句的执行。
谢谢马克先生 – avi 2010-04-02 08:20:38
中断语句仅在循环和切换子句中生效。无论如何,它会从最近的封闭循环中出来。这是一个很好的习惯,使用一些if语句附带的条件中断即break。如果你想从所有的循环或循环中走出来,你可以使用goto语句。例如:
while(true) {
while (some_condition) {
if (some_condition)
goto label;
}
}
label: // do something here
几乎每个问题goto都可以用break和continue声明来代替。goto语句倾向于创建“sphegetti”代码 – kapil 2015-10-02 13:16:09
仅供参考,如果不是循环。 – 2015-09-27 07:47:17
@CoolGuy也不是'switch' – 2015-09-27 08:14:16
@ M.M我知道。 OP在[上一个版本](http://stackoverflow.com/revisions/2565659/2)中说过“_'if' loop_”,我正在纠正它。 – 2015-09-27 08:18:49