下面有一个没有switch的break:
char c = 'a';
switch(c) {
break;
case 'a' : cout << 'a' << endl;
break;
case 'b' : cout << 'b' << endl;
break;
default : break;
}为什么这个代码片段会打印a?在遇到第一条break语句后,开关不应该中断吗?
发布于 2020-01-27 11:49:37
第一个break被忽略。
在switch(c),运行时跳到case 'a'作为c=='a'。之前的一切都被忽略了。
这就是为什么case 'b'在不打印'a'的情况下工作,这也是为什么在switch块中不允许变量定义的原因:
int n=0;
switch (n)
{
int k=n;
case 0:
return k; // UB
}发布于 2020-01-27 11:57:20
在C中,case在switch中是(类似于) goto标签。switch的头类似于goto本身。
后果
break,因为“登录”是基于goto的(非结构化的或单一的入口和出口点)。case之前的任何语句发布于 2020-01-27 12:05:51
switch是一系列丑陋的if和goto的紧凑和可读的形式,否则:
char c = 'a';
if(c=='a')goto _a; // test for "case 'a':"
if(c=='b')goto _b; // test for "case 'b':"
goto _default; // unconditional jump to "default:"
goto _break; // <-- program never goes to this line, the one you are asking about
_a: cout << 'a' << endl;
goto _break;
_b: cout << 'b' << endl;
goto _break;
_default:
goto _break;
_break:https://stackoverflow.com/questions/59930503
复制相似问题