在一个程序中,我看到了这样的代码(简单地说):
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
,但从未需要这样的代码......
答案 0 :(得分:1)
没有理由这样做。明确的case 2
可能是尝试编写自我记录代码,但在这里它并没有真正添加任何内容,因为代码缺少有意义的注释来解释案例2的独特之处。
有时您可以编写这样的代码,以便向读者明确记录您已考虑变量可能具有的所有可能值。例如,这样的自我记录代码可能对枚举有意义。
在这种情况下,它看起来真的只是代码仍在开发中。或者它是一些粗略的书面遗留物,它使它成为生产代码。
答案 1 :(得分:0)
上次我使用MISRA C(车辆的嵌入式C规则)时,所有switch语句都必须有一个默认子句。潜在地,这可能是您所看到的原因,因为这意味着传递到交换机的所有值都会起作用。不可否认,这意味着案例2是多余的,但是在整体阅读代码时可能会使事情更加清晰。它也可能是某种嵌入式编译器优化(有时嵌入式编译器在给定开关时生成更高效的代码,而不是几个ifs。)