c语言语法灵活,程序常常自由度大,书写限制较少,但也有个别特例不那么完美,switch语句便是如此
switch (语句表达式0)
{
case 常量表达式1: 语句块1;break;
case 常量表达式2: 语句块2;break;
......
default: 语句块n;
}
有两个问题决定了switch的不灵活:
1. 语句表达式0限制严格,只能用布尔型,整型,字符型等基本数据类型;(原因是此处需要给一个明确定义毫无偏差的数值,而如浮点数之类的数据类型会产生误差,存在“不确定性”)
2. case标签必须为唯一的常量表达式,只能写如:case 1; 而不能写作 case a=1;限制严格;(此处默认a=1,为了防止繁琐的操作而加此处限制,略显画蛇添足,不太符合书写习惯)。
而现在,在硬件设备的完善下,case几乎完全可以被if-else语句替代,而两者从机器内部编译实现或者人的操作上都区别不大,因此break语句的多限制决定了它不方便使用,这大概也算是c语言的不足之处了。