Z
ZHANK
结构体与内存

枚举 enum

枚举定义与使用、枚举值自动编号、与 #define 的对比

枚举 enum

enum 给一组相关的整数常量起名字——比 #define 更安全、更可读。

学完本章你将: 枚举定义与赋值、自动编号、enum vs #define。


基本用法

c
#include <stdio.h>

enum Color { RED, GREEN, BLUE };
// RED = 0, GREEN = 1, BLUE = 2(默认从 0 开始)

int main() {
    enum Color c = BLUE;

    if (c == BLUE) {
        printf("蓝色\n");
    }

    printf("%d\n", c);  // 2(本质是 int)

    return 0;
}

手动指定值

c
enum Status {
    OK = 200,
    NOT_FOUND = 404,
    ERROR = 500,
};

enum Weekday {
    MON = 1,   // 1
    TUE,       // 2(自动递增)
    WED,       // 3
    THU,       // 4
    FRI,       // 5
};

enum vs #define

c
// #define 方式
#define COLOR_RED 0
#define COLOR_GREEN 1
#define COLOR_BLUE 2

// enum 方式(更好)
enum Color { RED, GREEN, BLUE };

void paint(enum Color c) { ... }  // 类型提示!
// paint(COLOR_RED)  // 传什么 int 都行,编译器不检查
paint(RED);           // enum 提供了一定的语义
#defineenum
类型安全无(纯文本替换)有一定语义
调试可见不可见(已替换)可见
作用域全局遵循 C 作用域
内存不占占一个 int