C语言——枚举类型用法
枚举的定义
enum 枚举名{ 枚举元 素1,枚举元素2,枚举元素3...};
使用枚举类型的好处
增加程序的可读性,我们都知道在计算机中所有信息都是用二进制来表示的,如果你用二进制来表示某件事务是非常不直观的,为了使程序更加直观我们引入枚举。
枚举的应用
1 /*红色、黄色、绿色、蓝色,黑色*/ 2 enum color{red,yellor,green,blue,black}; 3 int main() 4 { 5 char user_color; 6 while(1) 7 { 8 printf("\n请输入颜色"); 9 scanf("%d",&user_color); 10 switch(user_color) 11 { 12 case red: printf("\n你输入的是红色\n"); break; 13 case yellor: printf("\n你输入的是黄色\n"); break; 14 case green: printf("\n你输入的是绿色\n"); break; 15 case blue: printf("\n你输入的是蓝色\n"); break; 16 case black: printf("\n你输入的是黑色\n"); break; 17 } 18 } 19 20 return 0; 21 }
枚举元素列表中,每个元素只能是整型,如果我们不指定某个元素的大小,默认是从0开始排列,如第2行中的枚举列表中red = 0、yellor = 1......black = 4,从这个代码中我们可以看到红色,黄色不再用数字表示,而是用枚举元素来表示红色、黄色等一些有意义的词,而这个枚举元素的名称可以自己定义,枚举元素本质还是数字。
用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明
1 typedef enum workday //此处的workday可以省略,或者改成其他,不会影响后面 2 { 3 saturday, 4 sunday, 5 monday, 6 tuesday, 7 wednesday, 8 thursday, 9 friday 10 } workday; //此处的workday为枚举型enum workday的别名,类似于int
正如上边代码注释所说,worday可以不要,代码如下
1 typedef enum 2 { 3 saturday, 4 sunday, 5 monday, 6 tuesday, 7 wednesday, 8 thursday, 9 friday 10 } workday; //此处的workday为枚举型enum workday的别名 11 workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
在程序中我们是直接可以用某个枚举中的枚举元素的,在STM32开发库中这种枚举用法非常多,下图就是STM32库中的代码示例,利用这个方法开发库,可以大大增加程序的可读性。
1 typedef enum 2 { 3 LED1 = 0, 4 LED2 = 1, 5 LED3 = 2, 6 LED4 = 3 7 } Led_TypeDef; 8 9 typedef enum 10 { 11 BUTTON_WAKEUP = 0, 12 BUTTON_TAMPER = 1, 13 BUTTON_KEY = 2, 14 BUTTON_RIGHT = 3, 15 BUTTON_LEFT = 4, 16 BUTTON_UP = 5, 17 BUTTON_DOWN = 6, 18 BUTTON_SEL = 7 19 } Button_TypeDef;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异