版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Johan_Joe_King/article/details/83615534
### C语言关键字浅析系列 ###
### ISO/ANSI C 关键字 ###
case语句是C语言中switch开关语句中常用的关键字
将switch语句后的小括号中的变量视为参数
如果下面某一个case后跟的常量与参数相同
则从该case后的代码开始执行
case的作用:
标记switch选择结构中程序开始执行的位置。
对比if-else关键字,case关键字的一大优势是可以按“开关”的思想控制语句开始执行的位置。
但case的一个劣势是,case后的参数需要是int或者char常量,不能是表达式,而if-else可以根据表达式结果判断执行。
/*
转换地址,不区分大小写
*/
int alterAddress(char c)
{
int add;
switch(c)
{
case 'a': /* 如果参数c是'a',程序从此处开始执行 */
case 'A': /* 如果参数c是'A',程序从此处开始执行 */
add = 0x11;
break; /* 为了屏蔽其他选项,发挥switch的选择功能,一类处理的最后要写上break跳过后面的执行语句 */
case 'b':
case 'B':
add = 0x12;
break;
case 'c':
case 'C':
add = 0x13;
/* 此处有bug,没有break会导致后面的语句继续执行,也许会造成程序结果错误 */
case 'd':
case 'D':
add = 0x14;
default:
add = 0x01;
}
return add;
}
case语句和if-else语句的另一个不同之处在于,case语句都在同一个作用域,case后定义变量可能会出错,比如下面这个例子:
int j;
switch(c)
{
case 'a':
int i; /* 这里编译器可能会报错,因为所有的case在一个作用域,这个i在所有case都可见 */
i = 0;
case 'b':
case 'c':
j = 2;
break;
}
解决方案是,用一个{}在case后嵌套一个代码块,强行做一个作用域:
int j;
switch(c)
{
case 'a':
{
int i; /* 用大括号围成一个代码块,i的作用域就限定在了该代码块内 */
i = 0;
}
case 'b':
case 'c':
j = 2;
break;
}
——参考《C Primer Plus第五版》