4.2 枚举与typedef

本篇学习 `enum` 与 `typedef` 的基础用法,并能用更清晰的名字表达状态、选项和值类型。

枚举与typedef

概念说明

枚举用于给一组离散整数值起有语义的名字。 typedef 用于给已有类型起别名,让复杂类型写起来更简洁。

这两者都不会改变底层数据的本质,但它们能明显提升代码可读性。 尤其是在状态机、协议字段、结构体别名和回调类型定义场景里,非常常见。

学这一节时可以抓住两点:

  • enum 更像“带语义的整数常量集合”。
  • typedef 更像“给现有类型起一个更顺手的名字”。

语法/规则

  1. 枚举定义形式是 enum 枚举名 { 成员1, 成员2, ... };
  2. 枚举成员默认从 0 开始递增,也可以手动指定某个成员的值。
  3. typedef 原类型 别名; 用来为已有类型创建别名。
  4. typedef struct Student Student; 是 C 项目里很常见的写法。
  5. 枚举值适合和 switch 搭配使用,让分支逻辑更清楚。
  6. typedef 不会创建一种全新的底层类型,它通常只是别名。
  7. 对外部协议或文件格式中的固定数值,最好显式指定枚举值,避免后续维护时顺序变化。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

typedef unsigned int u32;

enum Day {
    MONDAY = 1,
    TUESDAY,
    WEDNESDAY
};

int main(void) {
    enum Day today = WEDNESDAY;
    u32 count = 3;

    printf("today = %d\n", today);
    printf("count = %u\n", count);
    return 0;
}

输出结果:

1
2
today = 3
count = 3

常见错误

  1. 以为 typedef 会创建一种完全新的底层类型,实际上它通常只是别名。
  2. 把枚举当字符串使用,忘了它本质上仍然是整数常量集合。
  3. 枚举值需要跨系统协议传输时,不明确指定数值,后面维护成本会变高。
  4. 在复杂声明里滥用 typedef,结果把真实类型结构藏得太深,阅读者反而更难理解。
  5. 用普通整数到处表示状态,却没有使用枚举把语义明确下来。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字