C语言-枚举
概念
枚举是一个自定义数据类型,用于为一组整数常量赋予有意义的名字,使代码更易读、更易维护。可以将它理解为“给数字起别名”
枚举成员的本质就是一系列整数常量。它们通过赋予有意义的名称,将数字“符号化”,使得代码更易读、更符合人类逻辑
语法结构
enum 枚举类型名 {成员1, // 默认从0开始成员2, // 前一个值+1成员3 = 值, // 显式赋值...成员N//定义成员时也可以一行一行定义,使用习惯上是使用前一种方式成员1,成员2,成员3,
}; // 注意结尾的分号!
enum Weekday {Mon, // 0Tue, // 1Wed, // 2Thu=7, // 7Fri, // 8Sat, // 9Sun // 10
};
枚举成员的本质上是数值,第一成员默认是0,后续依次加1
如果中途进行赋值,后续的值会在赋值的基础上加1
为什么要使用枚举
在代码中直接出现的、未经解释的数值常量
这些数字没有明确的含义或上下文说明,导致代码难以理解和维护
不使用枚举
#include <stdio.h>int main() {int status = 1; // 1代表"失败"if (status == 0) {printf("程序成功!\n");} else if (status == 1) {printf("程序失败!\n"); // 这里会输出} else if (status == 2) {printf("程序等待中...\n");}// 问题1:数字0/1/2的意义不直观,需要查文档// 问题2:可能误赋值非法值(如status = 100)return 0;
}
使用枚举
#include <stdio.h>// 定义枚举类型,明确状态含义
typedef enum {SUCCESS, // 0FAILURE, // 1PENDING // 2
} ProgramStatus;int main() {ProgramStatus status = FAILURE; // 直接使用符号名if (status == SUCCESS) {printf("程序成功!\n");} else if (status == FAILURE) {printf("程序失败!\n"); // 这里会输出} else if (status == PENDING) {printf("程序等待中...\n");}// 优势1:代码自解释,无需注释// 优势2:若修改状态值,只需调整枚举定义// 优势3:编译器可部分检查非法赋值(如赋值字符串会报错)return 0;
}