switch的使用确实使代码清晰很多,特别是在多种case的情况下,但是switch语法的宽松也带来了一些麻烦。
以下是一段示例程序,switch带来的麻烦。
#include "stdio.h"
int main(int argc, char* argv[])
{
printf("Hello World!/n");
int i = 1;
//session 1:以下这个switch语句是正确的,编译通过
switch(i){
case 1:
case 2:
default:i++;
}
//session 2:以下这个switch语句是不正确的,defult写错了,写成defu1t,
//即将default 里面的 l 写成数字 1 ,但是同样编译通过
switch(i){
case 1:
case 2:
defau1t:i++;
}
printf("%d/n", i);
//conclusion:在switch中声明变量,乃至label是允许的,这也就是成就以上的bug
//因为笔误写错的defualt,却成为了defau1t label,语法上是允许的
//但是在语意上相差很远。
//但是很庆幸,vc6.0 给出了警告:warning C4102: 'defau1t' : unreferenced label
//我们非常感谢这条警告,它让我们从地狱中脱离出来
return 0;
}
运行结果:
3