switch语句中又爱又恨的default

在编写代码的过程中,经常会遇到令人头疼的问题,看似简单,其实陷阱很大。这里一下switch语句中的default分支问题。

常识

按照一般的编程规范,都是要求加上default分支的,它可以防止我们因为对分支情况的考虑不周全,而出现难以预测的情况。同时,每个分支也要求加上break。
而在有些问题当中,往往就不加break,此时,就会遇到default分支放哪儿的问题。
这个是比较基础的问题,一般就是三种:

  1. default放在分支最前面
  2. default放在case的中间
  3. default放在分支最后面

我们还知道,如果不加上break语句,则会顺序执行匹配到的分支及以下的分支。

问题

看起来好像就这么多规律,可实际实验中,我还发现了一些问题。总结起来,即:

default语句只会在任何分支都匹配不到情况下执行。
一旦有匹配到的分支,则default语句不论放在哪儿,都不会执行。

下面给出一例代码进行说明

int main(){
    int x = 2;
    switch(x){
        default: 
            printf("default\n");
        case 2:
            printf("2\n");
    }
    return 0;
}

由上面可以看出

  1. 当x=1时,没有case语句匹配,则default分支执行。
    由于没有break,则下面的case也跟着执行。执行结果为:
    default
    2

  2. 当x=2时,有case语句匹配,则default分支不再执行。执行结果为:
    2

好多人在说switch语句的时候,只会说没有break语句,就会顺序往下执行。
最容易忽略的是,default分支不论放在哪儿,都只会在没有case分支匹配的情况下,才会执行。
实际工作中,要求是default分支要有,而且要有一些实际的处理操作,防止一些预料不到的情况。而且要求写在最下面,这样最安全,且看起来代码最清晰。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 控制流For-In 循环While 循环If 条件语句Switch 语句控制转移语句 continu...
    寒桥阅读 4,066评论 0 0
  • Swift提供了多种控制流声明。包括while循环来多次执行一个任务;if,guard和switch声明来根据确定...
    BoomLee阅读 6,036评论 0 3
  • Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行...
    穷人家的孩纸阅读 3,998评论 1 1
  • 十三年前,一位美女教育家从香港去纽约。上飞机坐定之后,大家开始漫长的路途闲聊。 惹人注目的美女成为搭讪的首选...
    小溪缓缓流阅读 2,905评论 0 0
  • 想做的事情并没有完成,主播公众号发布,招聘发布,跟踪主播进程,还跑去看小说了,每晚弄到1点时间,白天去到公司困死了...
    崔焕英阅读 1,783评论 0 0

友情链接更多精彩内容