枚举 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 提供了一定的语义
| #define | enum | |
|---|---|---|
| 类型安全 | 无(纯文本替换) | 有一定语义 |
| 调试可见 | 不可见(已替换) | 可见 |
| 作用域 | 全局 | 遵循 C 作用域 |
| 内存 | 不占 | 占一个 int |