目录
1.枚举的定义
枚举(Enumeration)是一种用户自定义的数据类型,用于定义一组具有离散值的符号常量。枚举使得代码更加可读和易于理解,提高了代码的可读性和可维护性。
//枚举的语法
enum 枚举名称 {
值1,
值2,
值3,
...
};
2.枚举成员的类型
枚举的成员默认情况下都是整数类型,通常是int类型。这意味着每个枚举成员都会被赋予一个整数值,并且这些整数值从0开始递增。如果没有显式地指定枚举成员的值,那么第一个成员的值为0,第二个成员的值为1,依此类推。同时,可以显式地为枚举成员指定一个整数值,这个值可以是正整数、负整数或零。并且显性定义枚举变量的值之后,后面的枚举变量在这个整数值的基础上依次递增1。
#include <stdio.h>
int main()
{
enum day{
Sunday, //默认值为0
Monday, //依次递增
Tuesday,
Wednesday,
Thursday=-1,
Friday,
Saturday,
};
printf("%d\n",Sunday);
printf("%d\n",Monday);
printf("%d\n",Thursday);
printf("%d\n",Friday);
return 0;
}
运行结果:
3.枚举变量的访问
枚举成员的访问是通过枚举类型名称和成员名称来进行的。一旦定义了一个枚举类型,可以使用该类型来声明变量,并通过枚举成员名称来设置和访问其值。
注意:不可以通过(.)操作符来访问枚举成员的值,因为枚举成员不是结构体或类的成员。枚举成员的访问是通过枚举类型名称和成员名称来进行的,而不是像结构体或类成员那样使用(.)。
#include <stdio.h>
enum Color {
RED,
GREEN,
BLUE
};
int main() {
enum Color myColor; // 声明一个枚举变量
myColor = BLUE; // 设置枚举变量的值为BLUE
if (myColor == RED) {
printf("颜色是红色\n");
} else if (myColor == GREEN) {
printf("颜色是绿色\n");
} else if (myColor == BLUE) {
printf("颜色是蓝色\n");
}
return 0;
}
4.枚举的具体应用
4.1表示状态和标志位
枚举可以用来表示状态和标志位。例如,使用枚举来表示开关的状态,如打开(ON)和关闭(OFF);或者表示系统的状态,如就绪(READY)、等待(WAITING)等;表示选项和模式,可以定义不同的操作模式,如读取模式、写入模式和编辑模式。
enum SwitchState {
OFF,
ON
};
enum SystemState {
READY,
WAITING,
ERROR
};
enum OperationMode {
READ_MODE,
WRITE_MODE,
EDIT_MODE
};
4.2表示星期和月份
enum Weekday {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
enum Month {
January,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
};
4.3状态机和控制流
enum State {
IDLE,
RUNNING,
ERROR
};
enum State current_state = IDLE;
// 在状态机中根据当前状态执行不同的操作
switch (current_state) {
case IDLE:
// 执行空闲状态下的操作
break;
case RUNNING:
// 执行运行状态下的操作
break;
case ERROR:
// 执行错误状态下的操作
break;
}
5.枚举的作用
我们可以使用#define定义常量,为什么非要使用枚举?
枚举的优点:
1.增加代码的可读性和可维护性
2.和#define定义的标识符比较,枚举有类型检查,更加严谨
3.防止了命名污染(封装)
4.便于调试
5.使用方便,一次可以定义多个常量
总结一下:枚举是整型常数的集合,代码不是一个人的工作,需要一个team,所以为了自己为了大家,能用枚举就用吧。