枚举与typedef
概念说明
枚举用于给一组离散整数值起有语义的名字。
typedef 用于给已有类型起别名,让复杂类型写起来更简洁。
这两者都不会改变底层数据的本质,但它们能明显提升代码可读性。 尤其是在状态机、协议字段、结构体别名和回调类型定义场景里,非常常见。
学这一节时可以抓住两点:
enum更像“带语义的整数常量集合”。typedef更像“给现有类型起一个更顺手的名字”。
语法/规则
- 枚举定义形式是
enum 枚举名 { 成员1, 成员2, ... };。 - 枚举成员默认从
0开始递增,也可以手动指定某个成员的值。 typedef 原类型 别名;用来为已有类型创建别名。typedef struct Student Student;是 C 项目里很常见的写法。- 枚举值适合和
switch搭配使用,让分支逻辑更清楚。 typedef不会创建一种全新的底层类型,它通常只是别名。- 对外部协议或文件格式中的固定数值,最好显式指定枚举值,避免后续维护时顺序变化。
示例
| |
输出结果:
| |
常见错误
- 以为
typedef会创建一种完全新的底层类型,实际上它通常只是别名。 - 把枚举当字符串使用,忘了它本质上仍然是整数常量集合。
- 枚举值需要跨系统协议传输时,不明确指定数值,后面维护成本会变高。
- 在复杂声明里滥用
typedef,结果把真实类型结构藏得太深,阅读者反而更难理解。 - 用普通整数到处表示状态,却没有使用枚举把语义明确下来。