程序员,来说说你喜不喜欢使用switch/case语句?

李肖遥

共 1223字,需浏览 3分钟

 ·

2020-11-07 03:18

关注、星标公众号,直达精彩内容

ID:技术让梦想更伟大

作者:李肖遥


最近犯了个低级错误,请允许我水一篇,涨涨记性!

下面这个程序有啥问题?

//打印出对应的i
void test(int i)
{
    switch(i)
    {
    case 1:
        printf("data is %d\n",i);
        break;
    case 2:
        printf("data is %d\n",i);
        //break;
    case 3:
        printf("data is %d\n",i);
        break;
  default:
    break;
  }
}

不说你也懂的,在case 2下面没有break,这与我们设计的初衷是不符的,那么switch有哪些缺乏呢,我们来总结一下

switch 的缺点

语法正确,但是逻辑错误

写程序的时候忘记写break实在是再普通不过了,尤其是分类比较多的时候,因为从语法角度来说是正确的,所以比较容易忽视,可是代码的处理逻辑却是错误的!

死板的语法

switch对判断条件很严苛,case后面只能跟常量,其中的“表达式”的结果以及case后的“取值”只能是4种类型:byte、short、int和char,有些语言甚至只能用int类型作为判断条件,这种限制实在是太麻烦了。

需要子函数来处理分支

为了防止漏写break,因此建议把分支处理方法独立成一个子函数来处理,这样的代码就会减少忘记写break带来的bug。

switch 的优点

在很久以前,计算机科学家为了提高计算机的处理速度,把一些需要做逻辑判断的操作给固定死,然后只要查表就能做出相应的反应了。

比如说i=0的判断,switch在编译阶段将子函数的地址和判断条件绑定了,只要直接将a的直接映射到子函数地址去执行就可以了。

注意事项

要注意的一些情况:

  1. switch的break语句是可选的,即没有break,程序会继续执行后面的代码。

  2. default语句也是可选的,相当于对应if-else语句最后的else。

  3. switch语句的比较是从上往下,所以把匹配概率大的选择因子放在前面可以提高效率。

  4. 选择因子(case后面的数据)具有唯一性,即不能有2个相同的因子存在。

  5. default语句不论放在哪个地方,它都是在没有匹配的情况下才会去执行,也就是说case无论在什么情况下都会比default先执行

推荐阅读:


嵌入式编程专辑
Linux 学习专辑
C/C++编程专辑
Qt进阶学习专辑
关注微信公众号『技术让梦想更伟大』,后台回复“m”查看更多内容。

长按前往图中包含的公众号关注

浏览 58
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报