Jis*_*han 4 c switch-statement fall-through
所以我遇到了一个有竞争力的问题(询问输出)如下:
#include <stdio.h>
int main()
{
int i = 0;
for(i = 0; i < 20; i++)
{
switch(i)
{
case 0: i+=5;
case 1: i+=2;
case 5: i+=5;
default: i+= 4;
break;
}
printf("%d ", i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是16, 21。虽然我知道 switch case 是如何工作的,但我无法解释这个秋天是如何工作的。为什么要添加默认值?K&R C 书不是说只有在没有任何情况匹配时才执行默认值吗?
谢谢。
默认情况下只跃升至从switch如果没有其他情况相匹配的语句。在其中一个匹配后,代码会像没有任何case语句存在一样执行,除非它遇到break. 所以这个default案子并没有像你期望的那样“跳过”。
K&R对此有点不清楚,您所指的这条线似乎是:
如果 case 与表达式值匹配,则从该 case 开始执行。所有 case 表达式必须不同。如果不满足任何其他情况,则执行标记为 default 的情况
但这是在谈论switch语句如何分支。Fallthrough 行为在下一页:
因为 case 只是作为标签,在一个 case 的代码完成后,除非你采取明确的行动来逃避,否则执行会一直执行到下一个 case。
这不取决于是否有default案例。
C标准更清晰:
switch 语句导致控制跳转到、进入或跳过作为 switch 主体的语句,具体取决于控制表达式的值……如果转换后的值与提升的控制表达式的值匹配,则控制跳转到下面的语句匹配的大小写标签。否则,如果存在默认标签,则控制跳转到带标签的语句。
一旦控制跳转,case和default标签就不再重要了。
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |