c 语言 switch 的用法属于多分支选择语句,专门用来对同一个整型或者字符型表达式做等值匹配,和 if else if 链式判断相比,switch 适合判断选项是固定离散值的场景,比如菜单选择编号 星期编号 状态码判断,程序会计算 switch 括号里面表达式的值,然后依次和各个 case 后面的常量做等值对比,匹配成功就进入对应的 case 代码块执行,执行过程如果没有遇到 break 语句,程序会继续向下穿透执行后面所有 case 代码,直到碰到 break 或者整个 switch 结束,default 分支代表前面所有 case 都没有匹配成功的时候执行的兜底代码,default 可以写在任意位置,不是必须放在末尾,但是常规编码习惯放在最后,switch 只支持等值判断,不能像 if 那样写大于小于这类区间条件,这是它最大的限制,理解穿透特性是掌握 c 语言 switch 的用法最关键的知识点,很多初学者忘记写 break,就会出现意外执行多余代码的 bug。
基础语法
switch (表达式)
{
case 常量 1:
代码语句
break;
case 常量 2:
代码语句
break;
default:
兜底代码
break;
}
要点说明
switch 括号内表达式结果必须是整型 字符型 枚举类型,不能是浮点数也不能是字符串
case 后面必须是常量或者常量表达式,不能写变量
每个 case 后面是冒号,不是分号
break 作用是跳出整个 switch 结构,不写 break 就发生 case 穿透
使用完整步骤
第一步 确定判断对象,确认它是整型字符或者枚举,并且是离散等值匹配场景
第二步 列出所有可能的取值,每个取值单独写一个 case 标签
第三步 在每个 case 内部编写对应的处理代码,按需添加 break
第四步 增加 default 分支处理没有匹配到的情况
第五步 编译运行,修改表达式的值,观察匹配执行逻辑,测试穿透现象
case 穿透的应用
穿透不是全部都是错误,也可以主动利用穿透,多个 case 共用同一段处理代码,多个 case 标签连续写在一起,只在最后写代码和 break,代表多个取值执行相同逻辑,这种写法可以精简重复代码。
对比表格
项目 switch if else if
判断方式 仅等值匹配 支持等值大小区间复合条件
判断类型 仅限整型字符枚举 支持几乎所有类型
代码可读性 固定选项场景更清晰 复杂条件更灵活
穿透特性 存在 case 穿透 没有穿透概念
高频易错点
第一 忘记写 break,造成 case 穿透,多余代码被执行
第二 switch 表达式使用浮点数,编译报错
第三 case 后面写变量,case 要求常量,不能动态变化的值
第四 多个 case 写相同常量值,出现重复标签编译报错
第五 default 分支理解错误,以为 default 必须写,其实可以省略,没有 default 全部 case 不匹配就直接跳过整个 switch
【常见问题】
问题 1 c 语言 switch 的用法里面 break 可以省略吗
回答 1 c 语言 switch 的用法里面 break 可以省略,省略之后会触发 case 穿透,继续执行后面 case 代码,多数业务场景需要加上 break,部分多 case 共用代码场景会主动省略。
问题 2 c 语言 switch 的用法能不能判断大于小于区间
回答 1 c 语言 switch 的用法只支持等值匹配,不能直接写大于小于这类区间判断,如果需要区间判断,仍然要使用 if else if 结构。
问题 3 c 语言 switch 的用法里面 default 是不是必须写
回答 1 c 语言 switch 的用法中 default 不是强制要求,可以省略,当所有 case 都没有匹配成功的时候,程序直接退出 switch 结构,不会执行任何代码。
【免责申明】
本文内容仅用于 c 语言基础知识学习参考,代码示例仅做原理演示,实际项目开发请根据业务逻辑合理使用 switch,注意 case 穿透带来的逻辑风险,因编码错误造成程序运行异常,相关风险由使用者自行承担。


