switch 语句的执行流程如下:
计算表达式:
首先,计算 switch 语句中的表达式,得到一个整数值。
匹配 case 标签:
将计算得到的整数值与每个 case 标签的值进行比较。
执行代码块:
如果找到一个匹配的 case,则执行该 case 后面的代码块,直到遇到 break 语句或 switch 语句结束。
跳过 break:
如果没有遇到 break 语句,程序会继续顺序执行后面的 case 代码块,直到遇到 break 或 switch 语句结束。
执行 default 代码块:
如果表达式的值与所有 case 标签都不匹配,则执行 default 代码块(如果存在的话)。
结束 switch 语句:
执行完相应的代码块或 default 代码块后,switch 语句结束。
需要注意的是,每个 case 语句后面通常会有一个 break 语句,用于跳出 switch 语句,防止程序顺序执行多个 case 代码块。如果不使用 break 语句,程序会继续执行下一个 case 代码块,直到遇到 break 或 switch 语句结束。
此外,如果 switch 语句中没有 default 标签,且表达式的值与所有 case 标签都不匹配,则不执行任何操作,直接跳出 switch 语句。
下面是一个简单的 switch 语句示例:
```c
int i = 0;
switch (i) {
case 0:
i += 5;
// label 1
break;
case 1:
i += 2;
// label 2
break;
case 5:
i += 5;
// label 3
break;
default:
i += 4;
// label 4
break;
}
printf("%d\t", i);
```
在这个示例中,当 `i` 等于 0 时,会执行 case 0 的代码块,将 `i` 增加 5,然后由于存在 break 语句,程序会跳出 switch 语句。因此,最终 `i` 的值为 5。