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;
复制代码
posted @   鲸小鱼-  阅读(629)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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的设计差异
点击右上角即可分享
微信分享提示