在C语言中,enum
(枚举)是一种用户定义的数据类型,用于定义一组命名的整数常量。枚举类型可以提高代码的可读性和可维护性,因为它允许使用有意义的名称来代替硬编码的整数值。
基本语法
enum 枚举名 { 标识符1, 标识符2, ... 标识符N };
-
枚举名
:枚举类型的名称。 -
标识符
:枚举常量,默认情况下,第一个标识符的值为0,后续的标识符值依次递增1。
示例
#include <stdio.h>
// 定义一个枚举类型
enum Weekday {
Monday, // 0
Tuesday, // 1
Wednesday, // 2
Thursday, // 3
Friday, // 4
Saturday, // 5
Sunday // 6
};
int main() {
// 声明一个枚举变量
enum Weekday today;
// 赋值
today = Wednesday;
// 使用枚举变量
if (today == Wednesday) {
printf("Today is Wednesday.\n");
}
// 输出枚举值
printf("Wednesday is day number %d\n", Wednesday);
return 0;
}
自定义枚举值
你可以为枚举常量指定特定的整数值:
enum Weekday {
Monday = 1,
Tuesday, // 2
Wednesday, // 3
Thursday = 10,
Friday, // 11
Saturday, // 12
Sunday // 13
};
枚举类型的变量
你可以声明枚举类型的变量,并对其进行赋值和比较操作:
enum Weekday today = Friday;
if (today == Friday) {
printf("It's Friday!\n");
}
枚举与整数的关系
枚举常量实际上是整数,因此可以将枚举值赋给整数变量,反之亦然:
int day = Monday; // day = 0
enum Weekday tomorrow = day + 1; // tomorrow = Tuesday
注意事项
-
枚举的作用域:枚举类型和枚举常量在定义它们的文件或作用域内可见。
-
枚举的大小:枚举类型的大小通常与
int
相同,但具体取决于编译器实现。 -
枚举的命名冲突:枚举常量与普通变量或其他枚举常量不能重名。
另外记录一种枚举的用法(小白很容易忽视):
-
定义一个枚举类型:可是采用typedef,具体如下所示
-
定义一个数组:数组类型可以不使用枚举的类型别名,直接是unsigned char(即uint8_t),数组内容赋值,可以直接使用枚举定义的值。
typedef enum {
OpenStatus = 1, //BOOL-电源开关
CockpitStatus = 3, //BOOL-坐桶锁开关
MotorStatus, //BOOL-设防,设防打开时不能打开电源
FindBike = 5, //NUM-寻车 =1 寻车
StaticReportFrequency, //静止上报频率
DrivingReportFrequency, //行驶上报频率
TotalMileage = 11, //NUM-总里程
BatteryCycles = 13, //NUM-电池循环次数
BatteryCurrentCapacity, //当前电池容量
RemainingBatteryPower = 15, //NUM-剩余电量
BatteryTemperature, //电池温度
BatteryHealth, //电池健康度
BatteryConsumption, //电池耗电量
ControlVersion = 19, //软件版本号
Speed_per_hour = 21, //时速
Open_Charge_Board, //开充电盖
TiltWarning = 26, //振动报警
TILT_REPORT, //倾斜报警
ControlFailure = 49, //控制器故障
MotorFailure = 51, //电机故障
StoneAgeEnable = 109,
bleHidLockEnable = 110,
bleReportStauts = 111,
ChargingPower = 114, //充电功率
RemainingMileage = 115, //预估剩余里程
ChargingCableConnectionStatus = 117, //充电枪连接状态
ChargeAppointment = 118, //充电预约设置
CollisionNotice = 120, //碰撞通知
} Module_Param;
const uint8_t module_report[4] = {OpenStatus,RemainingBatteryPower,RemainingMileage,bleReportStauts};
const uint8_t share_report[4]={authkey,auth_account,auth_autolock,BtnPairModelSwitch};
这种使用方式,可以解决很多数据变量赋值的问题,方便代码管理和阅读~
总结
enum
是C语言中一种非常有用的数据类型,它可以帮助你定义一组相关的常量,并使代码更具可读性。通过使用枚举,你可以避免在代码中直接使用硬编码的整数值,从而提高代码的可维护性。