在编写代码的过程中,经常会遇到令人头疼的问题,看似简单,其实陷阱很大。这里一下switch语句中的default分支问题。
常识
按照一般的编程规范,都是要求加上default分支的,它可以防止我们因为对分支情况的考虑不周全,而出现难以预测的情况。同时,每个分支也要求加上break。
而在有些问题当中,往往就不加break,此时,就会遇到default分支放哪儿的问题。
这个是比较基础的问题,一般就是三种:
- default放在分支最前面
- default放在case的中间
- default放在分支最后面
我们还知道,如果不加上break语句,则会顺序执行匹配到的分支及以下的分支。
问题
看起来好像就这么多规律,可实际实验中,我还发现了一些问题。总结起来,即:
default语句只会在任何分支都匹配不到情况下执行。
一旦有匹配到的分支,则default语句不论放在哪儿,都不会执行。
下面给出一例代码进行说明
int main(){
int x = 2;
switch(x){
default:
printf("default\n");
case 2:
printf("2\n");
}
return 0;
}
由上面可以看出
当x=1时,没有case语句匹配,则default分支执行。
由于没有break,则下面的case也跟着执行。执行结果为:
default
2当x=2时,有case语句匹配,则default分支不再执行。执行结果为:
2
好多人在说switch语句的时候,只会说没有break语句,就会顺序往下执行。
最容易忽略的是,default分支不论放在哪儿,都只会在没有case分支匹配的情况下,才会执行。
实际工作中,要求是default分支要有,而且要有一些实际的处理操作,防止一些预料不到的情况。而且要求写在最下面,这样最安全,且看起来代码最清晰。