在C语言中,枚举(enum)是一种用户定义的数据类型,用于声明一组命名的整数常量,使代码更清晰、易读,特别是在线调试过程能直观的显示值的类型(不再是单纯的数值)。以下是枚举的详细用法和示例:
基本语法
enum 枚举名 {
枚举常量1,
枚举常量2,
// ...
} 变量列表;- 枚举常量:默认从 0 开始自动递增
- 显式赋值:可以手动指定值,后续常量继续递增
- 枚举变量:存储枚举常量的变量
使用示例
enum color {
RED = 1, // 手动赋值为1
GREEN, // 自动递增为2
BLUE = 5, // 手动赋值为5
YELLOW // 自动递增为6
};
int main(void) {
enum color c = GREEN;
printf("GREEN: %d\n", c); // 输出: 2
c = YELLOW;
printf("YELLOW: %d\n", c); // 输出: 6
return 0;
}枚举的高级用法
- 定义枚举类型变量
typedef enum {
OFF,
ON
} switch_state;
int main(void) {
switch_state s = ON; // 直接使用新类型名
printf("State: %d\n", s); // 输出: 1
return 0;
}- 枚举在switch中的使用
// 定义枚举类型
typedef enum {
NORTH,
SOUTH,
EAST,
WEST
}direction;
void print_direction(direction d) {
switch(d) {
case NORTH: printf("North\n"); break;
case SOUTH: printf("South\n"); break;
case EAST: printf("East\n"); break;
case WEST: printf("West\n"); break;
// 超出枚举范围,在嵌入式IDE(Keil)中可能会提示告警
default: printf("Invalid!\n");
}
}
int main(void) {
print_direction(EAST); // 输出: East
return 0;
}注意事项
- 枚举本质是整数:枚举常量在编译时会被替换为整数值,可以直接参与整数运算
- 作用域规则:枚举常量在全局作用域生效,需避免命名冲突
- 类型安全:C语言中枚举变量本质是 int 类型,以下代码不会报错(但可能不符合逻辑):
direction t = 100; 