在switch语句中,case后的标号只能是常量表达式。在一个特定的switch语句中,每个case常量都必须具有独一无二的值,不可以重复。但是switch语句可以包含多个case标签。
switch语句用于基于不同条件执行不同动作。
语法格式:
switch (变量表达式) { case 常量1: 语句;break; case 常量2: 语句;break; case 常量3: 语句;break; ... case 常量n: 语句;break; default: 语句;break; }
switch语句是一个条件选择语句,找到相同的case值做为执行后面的程序入口;若所有的case都不满足,则找default入口;若未找到default入口则退出整个switch语句。
case 后的常量指的是常量表达式。在一个特定的 switch 语句中,每个 case 常量都必须具有独一无二的值,不可以重复。但是 switch 语句可以包含多个 case 标签。
default 标签是可选的,可以放在 switch 语句体内任何位置。如果没有 default 标签,并且没有任何 case 常量符合 switch 语句控制表达式的计算结果,那么 switch 语句体中的语句都不会执行。在这种情况下,程序流会转而执行 switch 语句体后面的语句。
switch 语句体通常是一个从 case 标签开始的语句块。如果在第一个 case 标签之前有语句,这些语句并不会被执行。
C 语言的标签只用于标识程序流可能跳转到的目的地。这些标签本身对程序没有影响。因此,从 switch 跳转到第一个符合条件的 case 标签之后,程序会继续顺序执行,不受其他标签的影响。
如果在这个符合条件的 case 标签之后,其他 case 标签中的语句应该被忽略,就应该在所执行的最后一条语句后,加上 break 语句,使得程序流直接跳转到 switch 语句体的后面。
如果需要在 switch 语句内声明变量,那么这些变量应该被声明在嵌套的内部语句块中,如下所示:
switch ( x ) { case C1: { int temp = 10; // 声明temp,仅为该case使用 /* ... */ } break; case C2: /* ... */ }
在 switch 表达式中,应用了整数提升。case 常量被转换为匹配 switch 表达式计算结果的类型。
也可改用 else if 语句来实现 switch/case 语句效果。但是如果依据一个整数表达式的值来判断程序流,则应该使用 switch/case 语句,这种方式可以提高代码的可阅读性。