我偶然发现了这个代码,它按预期工作:
switch (ev->deviceType) {
break;
case DEVICE_TS1E0:
//some code
break;
case DEVICE_TS1E3:
//some code
break;
default:
//some logging
break;
}
现在,在切换开始时有一个寂寞的break;
,似乎没有效果。
是否有break;
会产生影响的情况?
答案 0 :(得分:4)
TL; DR break
语句无效并且是死代码。控制永远不会到达那里。
C11
标准有类似案例的一个很好的例子,让我直接引用。
从章节§6.8.4.2/ 7,(强调我的)
示例在人工程序片段中
switch (expr) { int i = 4; f(i); case 0: i = 17; /* falls through into default code */ default: printf("%d\n", i); }
标识符为
i
的对象存在自动存储持续时间(在块内),但永远不会 初始化,,因此如果控制表达式具有非零值,则对printf
函数的调用将 访问不确定的值。同样,无法访问对函数f
的调用。
答案 1 :(得分:2)
该语句与case
语句中switch
子句中没有的任何其他语句都是无法访问的代码,也就是死代码。这意味着他们无论如何都不会被运行。不建议使用它们。