2010-04-02 130 views
28

想,我有一个if语句for循环中:`break`是否仅用于for,while,do-while,switch和if语句?

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

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

现在,将break声明会导致编译出来的for循环或将它只能出现在身体的出if一次if中的条件变得满足了吗?

+1

仅供参考,如果不是循环。 – 2015-09-27 07:47:17

+1

@CoolGuy也不是'switch' – 2015-09-27 08:14:16

+0

@ M.M我知道。 OP在[上一个版本](http://stackoverflow.com/revisions/2565659/2)中说过“_'if' loop_”,我正在纠正它。 – 2015-09-27 08:18:49

回答

63

break声明跳出了最近的封闭循环开关声明

break没有打出去的if声明的,但最近的loopswitch包含if声明。不破坏if声明的原因是因为它通常用于决定是否要跳出loop

有趣的是,电话交换机因为发明了C made exactly this bug的公司而变得不合时宜。他们想摆脱if声明,他们忘记了它会突破整个for声明。

+0

谢谢先生,这是一个非常丰富的例子。 我现在清楚了。 – avi 2010-04-02 08:19:19

+2

[引用需要] :) – erelender 2010-04-02 08:25:28

+1

这是20年前的新闻。 erelender,你可以尽我所能Google,也许从ess软件bug中断等事情开始。 – 2010-04-04 23:44:51

16

它将跳出for循环。 A break声明仅对环路(dofor,while)和switch语句(用于突破case)有影响。

C99 standard,部分6.8.6.3:

约束

break语句应仅在或作为开关体或循环体出现。

语义

break语句终止最小包围开关 或循环语句的执行。

+0

谢谢马克先生 – avi 2010-04-02 08:20:38

13

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

+0

谢谢马蒂先生。 – avi 2010-04-02 08:20:08

2

中断语句仅在循环和切换子句中生效。无论如何,它会从最近的封闭循环中出来。这是一个很好的习惯,使用一些if语句附带的条件中断即break。如果你想从所有的循环或循环中走出来,你可以使用goto语句。例如:

while(true) { 
    while (some_condition) { 
      if (some_condition) 
       goto label; 
    } 
} 
label: // do something here 
+1

几乎每个问题goto都可以用break和continue声明来代替。goto语句倾向于创建“sphegetti”代码 – kapil 2015-10-02 13:16:09