C 语言的switch
语句用于根据表达式的值进行多路分支选择。以下是switch
语句的要点与注意事项:
要点:
-
基本语法:
1 switch (expression) { 2 case constant1: // 代码块1 3 break; 4 case constant2: // 代码块2 5 break; 6 ... 7 default: // 默认代码块 8 break; 9 }
- expression:是
switch
语句的条件表达式,其值会与case
后面的常量进行比较。这个表达式的类型通常是整型或字符型。 - case:后面跟的是要与
expression
的值进行比较的常量。如果expression
的值与某个case
后面的常量相等,那么会执行该case
下的代码块。 - break:在每个
case
的代码块后面,通常会有一个break
语句。这是为了防止代码执行完一个case
后继续执行下一个case
的代码,即“贯穿”(fall-through)现象。当break
语句被执行时,程序会跳出switch
语句,继续执行switch
后面的代码。 - default:
default
是可选的,用于处理expression
的值与所有case
常量都不匹配的情况。如果没有default
子句,且没有任何case
与expression
的值匹配,那么switch
语句内不会有任何操作被执行,建议每个switch
语句都配有一个default分枝
。
注意事项:
- 类型匹配:
switch
语句的表达式和case
标签的类型必须是整型或字符型。不能是浮点型、字符串或其他复杂类型。 - break 的重要性:如前所述,为了防止“贯穿”现象,每个
case
后面通常应该有break
语句。但如果你确实想要利用“贯穿”来实现某些逻辑,也可以故意省略break
。 - default 的位置:
default
子句可以放在switch
语句的任何位置,但通常放在最后,作为一种“如果上述所有情况都不匹配”的处理方式。 - 常量表达式:
case
后面跟的必须是常量表达式,不能是变量或运行时才能确定的表达式。 - 效率考虑:虽然
switch
语句在语法上看起来比多个if-else
语句更简洁,但在某些编译器或平台上,switch
语句可能并不总是比if-else
链更高效。编译器会根据具体情况进行优化。 - 代码可读性:当处理多个离散的、已知的值时,使用
switch
语句通常比使用多个if-else
语句更易于阅读和维护。 - 避免使用魔法数字:在
case
子句中,尽量避免直接使用数字字面量,而是使用具有明确意义的常量或枚举值,以提高代码的可读性和可维护性。
更进一步地,可参见如下详细介绍:
- case 标签的值不可超出 switch 条件的范围
- switch 语句中任何子句都应从属于某个 case 或 default 分枝
- case 和 default 标签应直接从属于 switch 语句
- 不应存在紧邻 default 标签的空 case 标签
- 不应存在内容完全相同的 case 分枝
- switch 语句的条件不应为 bool 型
- switch 语句不应只包含 default 标签
- switch 语句不应只包含一个 case 标签
- switch 语句分枝数量应在规定范围之内
- switch 语句应配有 default 分枝
- switch 语句的每个非空分枝都应该用无条件的 break 或 return 语句终止
- switch 语句应该用大括号括起来
- switch 语句不应嵌套
标签:语句,case,default,break,switch,注意事项,expression From: https://www.cnblogs.com/lucky-bubble/p/18228068