while循环内switch语句中break的作用及C语言标准规定咨询
C语言中break语句的作用范围解析
先看你给出的代码:
while(1) { switch(a){ case 1: if(b==1) break;//first break break;//second break } }
两个break的实际行为
- 第二个break:执行后会跳出当前的
switch语句,回到while(1)循环的末尾,因为while(1)是无限循环,会立刻进入下一次循环迭代。 - 第一个break:它虽然在
if代码块内部,但if不属于break能作用的结构,这个break的作用对象是外层最近的switch,所以执行后只会跳出switch,不会跳出while(1)循环,之后同样会进入while的下一次迭代。
C语言标准的规定
C语言标准明确:break语句仅会跳出最近的、包含它的switch语句或循环语句(for/while/do-while)。简单说,break只会作用于它所在的最内层switch或循环,不会跨层级跳出外层的循环结构。
你觉得作用顺序有变化,是误解了if对break的影响——if只是条件判断块,不是break的作用目标,所以不管break在不在if里,只要它的外层最近的可跳出结构是switch,就只会跳出switch。
内容的提问来源于stack exchange,提问作者Turbo
相关产品推荐
相关产品推荐

