好久没写点东西了,也是由于发现好像没有什么可写的,最近查资料时发现一个比较有意思的问题,所以想记录记录。
关于switch的用法,下面看一段小程序
#include <stdio.h>
int main(void)
{
int a = 1;
switch(a)
{
case 0:
printf("case 0\n");
break;
case 1:
printf("case 1\n");
break;
case 2:
printf("case 2\n");
break;
default:
printf("default\n");
break;
}
return (0);
}
上面这段代码相信大家都知道运行结果打印case 1
稍作修改
#include <stdio.h>
int main(void)
{
int a = 1;
switch(a)
{
case 0:
printf("case 0\n");
break;
case 1:
printf("case 1\n");
//break;
case 2:
printf("case 2\n");
break;
default:
printf("default\n");
break;
}
return (0);
}
相信知道认真学习过switch语句的人也都知道运行结果会打印case 1 case 2再次作修改
#include <stdio.h>
int main(void)
{
int a = 1;
switch(a)
{
case 0:
printf("case 0\n");
break;
case 1:
do{
printf("case 1\n");
//break;
case 2:
printf("case 2\n");
break;
} while(0)
default:
printf("default\n");
break;
}
return (0);
}
相信到这里如果之前未遇到过类似情况的人,应该大多数就会问这个能编译过么,因为我也没遇到过,开始也不知道答案如何。运行代码后输出: case 1 case 2 default,开始也不明白这是为什么。
其实只要是确定能编译通过,语法没有问题的话,用基本C语法就能解释这是为什么,而不是啥奇怪的问题,由于case 2下面有break,由于do{}while(0)的存在,break的语法明确指出,这个break应该是跳出do{}while(0),而不是跳出switch,跳出后,继续执行switch就会打印default。
所以,其实仅仅是巧妙的运用的switch及break的语法,只是一般人们不常这么用。这些基本语法的巧妙组合一般出现在大牛们的开源软件中,所以我们要好好的向大牛们学习!