switch 语句
来自 cppreference.cn
根据整数参数的值执行代码。
用于需要根据整数值执行多个代码分支中的一个或几个分支的情况。
目录 |
[编辑] 语法
attr-spec-seq(可选) switch ( expression ) statement |
|||||||||
属性说明序列 | - | (C23)可选的属性列表,应用于 switch 语句 |
表达式 | - | 任何表达式,其类型为整数类型(char、有符号或无符号整数,或枚举) |
语句 | - | 任何语句(通常是复合语句)。case: 和 default: 标签允许出现在语句中,并且 break; 语句具有特殊含义。 |
case constant-expression : statement |
(1) | (直至 C23) | |||||||
attr-spec-seq(可选) case constant-expression : statement(可选) |
(1) | (自 C23 起) | |||||||
default : statement |
(2) | (直至 C23) | |||||||
attr-spec-seq(可选) default : statement(可选) |
(2) | (自 C23 起) | |||||||
常量表达式 | - | 任何整数常量表达式 |
属性说明序列 | - | (C23)可选的属性列表,应用于标签 |
[编辑] 解释
switch 语句的主体可以有任意数量的 case:
标签,只要所有常量表达式的值是唯一的(在转换为表达式的提升类型之后)。最多只能有一个 default:
标签(尽管嵌套的 switch 语句可以使用它们自己的 default:
标签,或者具有与外部 switch 中使用的常量相同的 case:
标签)。
如果表达式的值等于其中一个常量表达式的值(在转换为表达式的提升类型之后),则控制权将转移到用该常量表达式标记的语句。
如果表达式的值与任何 case:
标签都不匹配,并且存在 default:
标签,则控制权将转移到用 default:
标签标记的语句。
如果表达式的值与任何 case:
标签都不匹配,并且不存在 default:
标签,则 switch 主体的任何部分都不会执行。
break 语句,当在语句中遇到时,将退出 switch 语句。
与所有其他选择和迭代语句一样,switch 语句建立块作用域:在表达式中引入的任何标识符在语句之后超出作用域。 如果 VLA 或其他具有可变修改类型的标识符在其作用域内有 switch (expr) { int i = 4; // not a VLA; OK to declare here f(i); // never called // int a[i]; // error: VLA cannot be declared here case 0: i = 17; default: int a[i]; // OK to declare VLA here printf("%d\n", i); // prints 17 if expr == 0, prints indeterminate value otherwise } |
(C99 起) |
[编辑] 关键词
[编辑] 示例
运行此代码
#include <stdio.h> void func(int x) { printf("func(%d): ", x); switch(x) { case 1: printf("case 1, "); case 2: printf("case 2, "); case 3: printf("case 3.\n"); break; case 4: printf("case 4, "); case 5: case 6: printf("case 5 or case 6, "); default: printf("default.\n"); } } int main(void) { for(int i = 1; i < 9; ++i) func(i); }
输出
func(1): case 1, case 2, case 3. func(2): case 2, case 3. func(3): case 3. func(4): case 4, case 5 or case 6, default. func(5): case 5 or case 6, default. func(6): case 5 or case 6, default. func(7): default. func(8): default.
[编辑] 参考
- C17 标准 (ISO/IEC 9899:2018)
- 6.8.4.2 switch 语句 (p: 108-109)
- C11 标准 (ISO/IEC 9899:2011)
- 6.8.4.2 switch 语句 (p: 149-150)
- C99 标准 (ISO/IEC 9899:1999)
- 6.8.4.2 switch 语句 (p: 134-135)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 3.6.4.2 switch 语句
[编辑] 另请参阅
C++ 文档,关于
switch 语句 |