C语言中switch语句的糟糕设计

C语言的 switch语句设计不符合C哲学。
    1、case标签变成彻彻底底的标签,每个case只能带一个整型常数,而相比普通标签却没有增加任何特性,语义特性减弱到甚至不如一个普通标签了。尽管原来的switch语句判断变量的值只允许是char范围,其设计的初衷可能是为了便于编译器优化,但几乎可想而知,这觉得不符合使用。事实上的结果也并不朝着初衷方向。
    2、引入default关键字是多余的,完全可以用case else双关键字代替。首先,default在文字表达上只略比case else好一点点但不多,但使用case else却可以节约一个关键字资源。
    3、将case和default标签设计成默认具有fall through特性而靠break语句来跳出switch是一个错误。
       a.如此设计目的是一是为了保持switch块内部的良好结构化,有利于简化编译器设计和优化;一是可以实现一些特殊的控制结构。但实际应用时却极少甚至几乎不会用到这种特性,但却不得不为此多写一个break,而一旦疏忽忘记写break而没有好的编译器帮忙提出警告,则可能由此埋下灾难的种子。
       b.也因为通常不会使用fall through,因此通常程序员更注重的是将每个case或default标签随后的若干语句保持其局部的结构化,以利于程序代码的维护。此情况下,若使用fall through特性反而可能会破坏掉这种局部的结构性。
       c.由于break关键字不只用于switch语句,还用于循环语句且语法完全相同,当两种语句嵌套使用时将只能依赖于上下文分辨,十分容易混淆,而无论break语句在哪个语句里面,此时编译器都不会发出任何抱怨,即使结果不是所要的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值