C:默认情况下空案例,没用?

时间:2016-07-06 07:49:01

标签: c switch-statement case

在一个程序中,我看到了这样的代码(简单地说):

switch (x){
    case 1:
        //dostuff
        break;

    /*___________________*/
    //Here it is important
    case 2:
    default:
        //dostuff
        break;
}

现在我想知道为什么有人写一个案例并在默认案例之前将其留空。

(显然,在另一个case之前它会有意义。

我知道在C中,如果没有break则会有一个漏洞,所以如果x为2,则程序会在case 2:部分运行,并直接进入默认情况。

case 2: - 案例也没用,因为其中没有代码,default也会在没有标签的情况下完成,所以在有和没有案例的情况下完成同样的事情吗? / p>

是否有理由编写这样的代码(比如维护时更容易修改,但在我看来并不相关),或者程序员是不是错误地删除了它?

我在不同的语言中多次使用switch,但从未需要这样的代码......

2 个答案:

答案 0 :(得分:1)

没有理由这样做。明确的case 2可能是尝试编写自我记录代码,但在这里它并没有真正添加任何内容,因为代码缺少有意义的注释来解释案例2的独特之处。

有时您可以编写这样的代码,以便向读者明确记录您已考虑变量可能具有的所有可能值。例如,这样的自我记录代码可能对枚举有意义。

在这种情况下,它看起来真的只是代码仍在开发中。或者它是一些粗略的书面遗留物,它使它成为生产代码。

答案 1 :(得分:0)

上次我使用MISRA C(车辆的嵌入式C规则)时,所有switch语句都必须有一个默认子句。潜在地,这可能是您所看到的原因,因为这意味着传递到交换机的所有值都会起作用。不可否认,这意味着案例2是多余的,但是在整体阅读代码时可能会使事情更加清晰。它也可能是某种嵌入式编译器优化(有时嵌入式编译器在给定开关时生成更高效的代码,而不是几个ifs。)