C语言枚举类型(enum)

介绍

枚举(enum) 是 C 语言中一种自定义数据类型,用来定义一组有名字的整型常量,让代码更易读、更规范,专门用来表示固定范围的取值(比如星期、颜色、性别、状态等)。


一、基础语法

1. 定义枚举类型

// 格式
enum 枚举名 {
    枚举常量1,
    枚举常量2,
    枚举常量3,
    ...
};

2. 定义枚举变量

有两种写法:

// 写法1:先定义类型,再定义变量
enum 枚举名 变量名;

// 写法2:定义类型时直接定义变量
enum 枚举名 {
    常量列表
} 变量名;

二、最简单示例:表示星期

#include <stdio.h>

// 定义枚举类型:星期
enum Weekday {
    MON,    // 0
    TUE,    // 1
    WED,    // 2
    THU,    // 3
    FRI,    // 4
    SAT,    // 5
    SUN     // 6
};

int main() {
    // 定义枚举变量
    enum Weekday today = WED;

    // 枚举本质是整数,直接打印会输出对应数值
    printf("今天是星期:%d\n", today);  // 输出 2

    return 0;
}

枚举常量默认值规则

  • 默认从 0 开始依次递增
  • 你也可以手动指定值,后面未指定的会自动顺延
enum Weekday {
    MON = 1,  // 手动指定从1开始
    TUE,      // 2
    WED,      // 3
    ...
};

三、枚举的核心特点

  1. 枚举常量本质是 int 整型
    • 可以直接赋值给 int 变量
    • 可以参与运算、比较
  2. 枚举变量只能取枚举列表里的值(规范用法)
  3. 提高代码可读性
    • 用 RED 比用 0 更直观
    • 用 OPEN 比用 1 更清晰

四、常用实用示例

示例1:表示颜色

enum Color {
    RED,
    GREEN,
    BLUE
};

enum Color c = GREEN;

示例2:表示状态(非常常用)

enum State {
    STOP,
    RUN,
    PAUSE
};

enum State machine = RUN;

五、枚举和宏定义(#define)的区别

方式 优点 缺点
枚举 enum 分组管理、自动赋值、类型安全 必须是整型
#define 灵活,可以定义任意常量 零散、无类型、不易维护

开发中优先用枚举,因为更规范、更易读。


六、高级用法:typedef 简化枚举

用 typedef 可以给枚举起别名,不用每次写 enum:

// 定义 + 重命名
typedef enum {
    MON,
    TUE,
    WED
} Weekday;

// 直接使用别名
Weekday today = TUE;

这是实际项目中最常用的写法。


总结

  1. 枚举 = 一组有名字的整型常量
  2. 用来表示固定取值:星期、颜色、状态、方向等
  3. 默认从 0 开始,可手动指定值
  4. 本质是 int,可直接打印数值
  5. 用 typedef 可以简化写法,不用写 enum 关键字

需要我给你写一个枚举+switch 分支的完整实战代码吗?这是枚举最常用的场景。