news 2026/9/2 8:06:06

C语言:枚举体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言:枚举体

目录

一.定义

二.枚举类型的声明

三.优点

四.枚举变量


一.定义

将可能的类型和取值一一列举出来,比如月份12个月,一月,二月,三月等等,那我们就可以把这些月份一一列举出来并放在一起。

二.枚举类型的声明

1.声明:

enum Day//枚举类型的声明 { Mon,//枚举常量 Tue,//注意是逗号,而结构体中的成员用分号 Wed, Thur, Fri, Sat, Sun//最后一个无逗号 };//注意有逗号

2.枚举常量:

(1)

每个枚举常量(不是变量,因此只能初始化,后面不能给枚举常量赋值)有对应的取值,默认从0开始,依次递增。

#include<stdio.h> enum Day//枚举类型的声明 { Mon, Tue, Wed, Thur, Fri, Sat, Sun }; int main() { printf("%d\n",Mon);//直接访问成员即可 printf("%d\n",Tue); printf("%d\n",Wed); printf("%d\n",Thur); printf("%d\n",Fri); printf("%d\n",Sat); printf("%d\n",Sun); return 0; }

(2)同时也可以在声明枚举类型的时候赋初值(只能在这里赋初值,后面就不行了)

#include<stdio.h> enum Day//枚举类型的声明 { Mon=1, Tue=2, Wed=3, Thur=4, Fri=5, Sat=6, Sun=7 }; int main() { printf("%d\n",Mon); printf("%d\n",Tue); printf("%d\n",Wed); printf("%d\n",Thur); printf("%d\n",Fri); printf("%d\n",Sat); printf("%d\n",Sun); return 0; }

(3)对其中一个枚举常量赋初值,紧接后面的枚举常量依次+1

#include<stdio.h> enum Day//枚举类型的声明 { Mon,//前面默认从0开始 Tue, Wed=4,//给Wed枚举常量赋初值4 Thur, Fri, Sat, Sun }; int main() { printf("%d\n",Mon); printf("%d\n",Tue); printf("%d\n",Wed); printf("%d\n",Thur); printf("%d\n",Fri); printf("%d\n",Sat); printf("%d\n",Sun); return 0; }

三.优点

1.增加代码的可读性和可维护性

可读性:用枚举常量替代数字,代码更容易理解。

可维护性:修改枚举值时无需全局替换数字。

2.枚举有类型检查,比#define更严谨。

3.可以调试,而#define在预处理中就被删去。

4.使用方便,一次可以定义多个常量。

5.枚举常量遵循作用域规则,而#define在全局中都可以使用。

四.枚举变量

1.枚举变量定义:

#include<stdio.h> enum Day { Mon, Tue, Wed, Thur, Fri, Sat, Sun }; int main() { enum Day d;//枚举变量定义 return 0; }

2.枚举变量初始化:

不能用整数给枚举变量赋值,应该使用枚举常量给枚举变量赋值。

#include<stdio.h> enum Day { Mon, Tue, Wed, Thur, Fri, Sat, Sun }; int main() { enum Day d = 0;//错误,不能用整数给枚举变量赋值,因为左右两边类型不同。 //但在C语言中可以,C++不行,因为C++类型检查更严格。 enum Day d = Mon;//使用枚举常量给枚举变量赋值 return 0; }

五.应用

核心:解决“数字含义模糊问题”,能够有效提升代码质量。

1. 状态与模式表示

用于清晰定义对象的离散状态(如设备状态、流程阶段),避免直接使用无意义的数字。

// 定义设备状态枚举 enum DeviceState { IDLE, // 空闲(默认值0) RUNNING, // 运行(值1) PAUSED, // 暂停(值2) ERROR // 错误(值3) }; // 使用枚举表示当前状态 enum DeviceState current_state = RUNNING; if (current_state == ERROR) { printf("设备异常,请检查!\n"); }

2. 错误码统一管理

替代分散的错误数字(如-1、-2),用枚举集中定义错误类型,便于调试和维护。

// 定义文件操作错误码 enum FileError { SUCCESS = 0, // 成功(显式赋值0) FILE_NOT_FOUND = -1, PERMISSION_DENIED = -2, DISK_FULL = -3 }; // 函数返回枚举类型的错误码 enum FileError read_file(const char* path) { if (!path) return FILE_NOT_FOUND; // ... 其他逻辑 ... return SUCCESS; }

3. 互斥选项/配置项

表示一组互斥的选择(如颜色、模式、菜单选项),使代码意图更明确。

// 定义UI主题颜色枚举 enum ThemeColor { THEME_RED, THEME_GREEN, THEME_BLUE }; // 应用主题配置 void set_theme(enum ThemeColor color) { switch(color) { case THEME_RED: printf("主题切换为红色\n"); break; case THEME_GREEN: printf("主题切换为绿色\n"); break; default: break; } }

4. 位掩码(Bitmask)实现多选项

通过枚举值按位分配,实现“多选一”或“多选多”的场景(需结合位运算)。

// 定义权限枚举(每个值占1位) enum Permission { READ = 1 << 0, // 0b0001(读权限) WRITE = 1 << 1, // 0b0010(写权限) EXECUTE = 1 << 2 // 0b0100(执行权限) }; // 组合权限(读+写) int user_perm = READ | WRITE; // 检查是否有执行权限 if (user_perm & EXECUTE) { printf("拥有执行权限\n"); }

文章到这里就结束了,创作不易,如果喜欢的话点个关注,点个赞,谢谢大家!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 23:25:12

LobeChat能否集成区块链验证?可信计算场景应用探讨

LobeChat 与区块链的可信融合&#xff1a;构建可验证 AI 交互的新范式 在人工智能日益深入企业决策、法律咨询和医疗辅助等高敏感领域的今天&#xff0c;一个问题变得愈发紧迫&#xff1a;我们能否真正信任 AI 的每一次输出&#xff1f;当一个医生依赖 AI 给出诊断建议&#xf…

作者头像 李华
网站建设 2026/9/3 1:51:13

YOLO目标检测准确率低?这几点必须检查

YOLO目标检测准确率低&#xff1f;这几点必须检查 在工业质检、自动驾驶和智能监控等实际场景中&#xff0c;我们常常会遇到一个令人头疼的问题&#xff1a;明明用的是当前最主流的YOLO模型&#xff0c;为什么检测结果还是频频“漏检”或“误报”&#xff1f;更让人困惑的是&am…

作者头像 李华
网站建设 2026/9/1 19:41:07

【LLM基础教程】语言模型基础

1. 什么是语言模型 ​ 语言模型起源于语音识别(speech recognition)领域&#xff0c;输入一段音频数据&#xff0c;语音识别系统通常会生成多个句子作为候选&#xff0c;究竟哪个句子更合理&#xff1f;就需要用到语言模型对候选句子进行排序。如今语言模型的应用范围早已扩展到…

作者头像 李华
网站建设 2026/9/2 21:09:25

教育场景适用吗?LobeChat作为教学辅助工具的潜力

LobeChat作为教学辅助工具的潜力 在数字化教学浪潮席卷校园的今天&#xff0c;许多教师都面临一个共同困境&#xff1a;如何在有限的课时内兼顾全班学生的个性化学习需求&#xff1f;课后答疑信息刷屏、重复讲解基础概念、批改作业耗时耗力——这些琐碎却必要的工作&#xff0c…

作者头像 李华
网站建设 2026/9/3 2:54:54

LobeChat能否用于生成产品描述?电商平台文案利器

LobeChat能否用于生成产品描述&#xff1f;电商平台文案利器 在电商运营的日常中&#xff0c;你是否曾为成百上千件商品撰写描述而焦头烂额&#xff1f;一个爆款新品上线&#xff0c;团队却卡在“如何用120个字打动消费者”上迟迟无法推进。人工写得慢、外包成本高、风格还不统…

作者头像 李华
网站建设 2026/9/3 3:12:16

LobeChat能否支持图表生成?数据可视化回答呈现

LobeChat 能否支持图表生成&#xff1f;数据可视化回答的实现路径与实践洞察 在智能对话系统日益渗透企业分析、科研辅助和教育演示的今天&#xff0c;用户早已不满足于“文字复述”式的问答交互。一个真正高效的 AI 助手&#xff0c;不仅要能理解复杂问题&#xff0c;更应具备…

作者头像 李华