C 语言 enum 的用法 📅 发布时间:2026/7/5 2:20:35 👁️ 浏览次数: 一、enum 是什么enum是枚举类型用来定义一组有限、固定、具名字的整型常量。本质枚举成员都是int常量只是用文字替代数字可读性远优于纯数字。语法基础enum 枚举名 { 枚举常量1, 枚举常量2, 枚举常量3 };二、基础默认规则不手动赋值若不给成员指定数值默认从0开始依次自增 1#include stdio.h enum Color { RED, // 0 GREEN, // 1 BLUE // 2 }; int main(void) { enum Color c GREEN; printf(RED%d, GREEN%d, BLUE%d\n, RED, GREEN, BLUE); printf(c %d\n, c); return 0; }输出RED0, GREEN1, BLUE2 c 1三、手动指定枚举常量的值1. 指定第一个值后续自动递增enum Week { MON 1, TUE, // 2 WED, // 3 THU, // 4 FRI, // 5 SAT, // 6 SUN // 7 };2. 任意成员自定义数值后面继续自增enum Status { OK 0, WARN 10, ERR, // 11 FATAL 99 };3. 允许多个枚举成员取相同数值enum Signal { OFF 0, LOW 0, HIGH 1 };四、enum typedef 简化工程最常用原生枚举变量必须写enum Color搭配typedef可省略enum1. 分开定义enum Color { RED, GREEN, BLUE }; typedef enum Color Color; Color c RED;2. 一步简写推荐typedef enum { RED, GREEN, BLUE } Color; Color c BLUE;五、枚举变量使用规则1. 赋值方式typedef enum { ON, OFF } Switch; int main() { Switch s1 ON; // 标准赋值 Switch s2 0; // 合法枚举本质int int x OFF; // 枚举常量可直接赋值给int return 0; }2. 与整型混用、比较typedef enum { A1, B2, C3 } Test; if (B 2) { printf(相等\n); }3. 数组下标、switch 完美适配枚举最适合switch代码更清晰明了#include stdio.h typedef enum { CMD_START, CMD_STOP, CMD_RESET } Cmd; void handleCmd(Cmd cmd) { switch(cmd) { case CMD_START: printf(启动设备\n); break; case CMD_STOP: printf(停止设备\n); break; case CMD_RESET: printf(复位设备\n); break; default: printf(未知指令\n); } } int main() { handleCmd(CMD_RESET); handleCmd(99); // 传入非法int也能进default return 0; }六、枚举的作用域全局枚举定义在函数外整个文件可用局部枚举定义在函数内部仅函数内有效。void func() { enum Local { X1, Y2 }; enum Local a X; } // 外部无法使用 enum Local七、枚举常量是常量不可修改枚举成员是编译期常量不能被赋值typedef enum { A, B } E; A 100; // 编译报错常量不能左值赋值八、enum vs #define核心区别很多人用宏定义常量枚举优势明显对比项enum#define类型检查有属于独立枚举类型编译器可校验无纯文本替换只是数字作用域遵循局部 / 全局作用域全局生效无局部作用域调试调试器能看到常量名RED/GREEN调试只显示数字看不到名字占用空间一组常量只分配一份类型信息每个宏单独文本替换无分组switch 支持天然适配可读性强也能用但语义松散示例对比// 宏方式 #define RED 0 #define GREEN 1 #define BLUE 2 // 枚举方式更优 typedef enum { RED, GREEN, BLUE } Color;九、复杂实战位掩码枚举硬件 / 标志位高频用法利用 2 的幂赋值一个 int 存储多个标志位typedef enum { FLAG_READ 1 0, // 0b0001 FLAG_WRITE 1 1, // 0b0010 FLAG_EXEC 1 2 // 0b0100 } FileFlag; int main() { // 同时开启读写权限 int flags FLAG_READ | FLAG_WRITE; // 判断是否有写权限 if (flags FLAG_WRITE) { printf(可写入\n); } // 移除读权限 flags ~FLAG_READ; return 0; }
智能项目管理周报:AI 可以汇总状态,不能替代判断 智能项目管理周报:AI 可以汇总状态,不能替代判断 一、周报自动生成不等于项目可控 智能项目管理里,周报生成是很常见的 AI 场景。模型读取任务、评论、提交记录和会议纪要,生成进度摘要和风险提醒。这个能力能节省整理时间&#x… 2026/7/5 2:16:34
微软的云平台 虽然我们不能亲自开发一个云平台,但是我们可以使用并体验云平台给我们带来的好处,在这个过程中我们也可以通过具体使用、深入分析、再次使用、回归总结的方式来逐步深化我们的认知程度,这样循环往复以后就从中获得预期的收益。我们这个系列目… 2026/7/5 2:16:34
Wishbone BFM 设计与实现:从手写总线到自动化自检 摘要 在 FPGA 验证中,总线接口(如 Wishbone)的握手时序最容易被忽视,也最容易导致“波形对但逻辑错”的隐性问题。本文将拆解一个我在实际项目中使用的 Wishbone Master BFM(总线功能模型),涵盖… 2026/7/5 2:14:33
2026自助KTV品牌测评:谁家唱得舒心又划算 一、从“重资产困局”到“轻量化破局”当我们谈及线下娱乐的数字化转型,自助KTV(又称迷你KTV、共享KTV)无疑是实体零售智能化最激进的实践者之一。它用极简的物理空间、极低的运营人力,以及对C端用户“随到随唱”的极致响应&#… 2026/7/5 3:41:05
MyBatis <bind> 使用指南 1. 什么是 <bind> <bind> 是 MyBatis 动态 SQL 中用于定义临时变量的标签。 它可以把一个表达式、参数路径或加工后的值,先绑定成一个新的变量名,然后在后续 SQL 中复用。 简单理解:<bind> 就是给 MyBatis 动态 SQL 里的某… 2026/7/5 3:39:05
Python 3.11 数据科学实战:5步构建批判性思维分析框架,识别数据偏见 Python 3.11 数据科学实战:5步构建批判性思维分析框架,识别数据偏见在数据驱动的决策时代,我们常常陷入一种危险的错觉——认为数字不会说谎。但正如统计学家George Box所言:"所有模型都是错的,只是有些有用。&qu… 2026/7/5 3:39:05
考勤机内网穿透绑定方案 🎯 方案核心逻辑 由于 EHR 系统只能主动连接 IP 端口,而分点的考勤机没有固定公网 IP,所以需要: 云服务器(frps):作为“跳板”,拥有固定公网 IP,负责监听和转发请求。 分… 2026/7/5 3:37:04
AI学习(2)——补:linux自启动llama 开机自启动 创建自启动脚本样本 (之前已说明,不过多赘述) #!/bin/bash# 1. 初始化 Conda (请将路径替换为你实际的 miniconda/anaconda 安装路径) source /home/wuakaka/anaconda3/etc/profile.d/conda.sh# 2. 激活指定的虚拟环境 conda acti… 2026/7/5 3:33:03
跟我一起进行KiCad设计(五):从零到一的PCB实战布局与布线 1. 从原理图到PCB的关键第一步当你完成原理图设计后,激动人心的PCB设计阶段就开始了。我清楚地记得第一次使用KiCad时,面对空白的PCB画布那种既兴奋又忐忑的心情。别担心,跟着我的步骤走,你也能顺利完成这个转变。首先点击工具栏的… 2026/7/5 3:27:02
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36