switch语句中的独立break

时间:2016-04-27 08:17:43

标签: c switch-statement break

我偶然发现了这个代码,它按预期工作:

switch (ev->deviceType) {

    break;

    case DEVICE_TS1E0:
        //some code
        break;

    case DEVICE_TS1E3:
       //some code
       break;

    default:
        //some logging
        break;
}

现在,在切换开始时有一个寂寞的break;,似乎没有效果。

是否有break;会产生影响的情况?

2 个答案:

答案 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子句中没有的任何其他语句都是无法访问的代码,也就是死代码。这意味着他们无论如何都不会被运行。不建议使用它们。