“break”是否仅适用于“for”、“while”、“do while”、“switch'”;至于'if'语句呢?

“break”是否仅适用于“for”、“while”、“do while”、“switch'”;至于'if'语句呢?,c,break,C,Break,假设在for循环的中有一个if语句: for( ; ; ) { if( ) { printf(" inside if"); break; }//if printf("inside for"); }//for 现在,break语句是否会导致编译器退出for循环,或者只有当if中的条件得到满足时,它才会退出if循环体?它将退出for循环。break语句仅对循环(do,for,while)和switch语句(用于中断案例)有效 根据第6

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

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

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

现在,
break
语句是否会导致编译器退出
for
循环,或者只有当
if
中的条件得到满足时,它才会退出
if
循环体?

它将退出
for
循环。
break
语句仅对循环(
do
for
while
)和
switch
语句(用于中断
案例
)有效

根据第6.8.6.3节:

约束

中断语句只能出现在开关体或回路体中或作为开关体或回路体出现

语义

break语句终止最小封闭开关的执行 或迭代语句


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

语句
break
从最近的封闭循环开关语句中中断

break
不是从
if
语句中中断,而是从包含该
if
语句的最近的
loop
switch
中中断。不中断
if
语句的原因是,它通常用于决定是否要中断
循环


有趣的是,一个电话交换机出现了问题,因为发明C。他们想中断一个
if
语句,却忘了它会中断整个
for
语句。

中断语句只对循环和开关子句有效。在任何情况下,它都会从最近的封闭环中出来。使用条件中断是一种很好的做法,即中断由一些if语句括起来。如果您想从所有循环或某些循环中走出来,可以使用goto语句。例如:

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

break语句在决策语句中没有用处。它仅在循环中使用,当您希望强制从循环终止并从循环后面的语句继续执行时。不存在“如果条件为true,则break语句会导致控件出自if语句”的问题,因为不管break语句如何,只要条件为true,并且一旦执行了其主体,控件都会出自if语句。if语句不是循环。它要么根本不执行,要么只执行一次。因此,在if的主体中加一个中断是毫无意义的。

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

谢谢,先生,这是一个非常有用的示例。我现在清楚了,这是20年前的新闻。埃雷伦德,你可以像我一样用谷歌搜索它,也许可以从ess软件bug break.FYI这样的东西开始,如果
不是循环的话。@CoolGuy
switch
@M.M我知道。OP在中说了“
if
loop”,我正在纠正这一点。对于几乎每个问题,goto都可以用break和continue语句代替。goto语句倾向于创建“sphegeti”代码