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

源码共读

共 1318字,需浏览 3分钟

 ·

2020-12-30 13:56

Python实战社群

Java实战社群

长按识别下方二维码,按需求添加

扫码关注添加客服

进Python社群▲

扫码关注添加客服

进Java社群


作者丨李肖遥

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先执行


程序员专栏
 扫码关注填加客服 
长按识别下方二维码进群

近期精彩内容推荐:  

 看电影前一定要检查一下域名是不是HTTPS的

 有个大神级女朋友是什么体验

 世界上五个最不务正业的科学家!

 魂斗罗只有128KB为何可以实现那么长的剧情





在看点这里好文分享给更多人↓↓

浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

举报