嵌入式C语言冷知识!枚举最后的"end"竟是这个作用

原创 小麦大叔 2025-05-15 20:01
点击上方名片,选择“置顶/星标公众号”
福利干货,第一时间送达


大家好,我是麦鸽。
最近看到这个问题,一开始,也有一些疑惑,后面查了一些资料,对于这个问题,简单的说一下我的看法。

枚举有多大

枚举类型到底有多大,占多少空间呢?这个要具体情况具体分析,编译器会视情况而定。

下面是我测试用的编译器版本。

gcc (Ubuntu 7.5.0-3ubuntu1~18.047.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

当我写下这段代码的时候,实际的输出会是多少呢

有人会说是 1,有人会说是 4,我最终运行的确实是4

输出结果

但是这个结果并不是唯一的,它取决于你的编译器,另外还取决于编译器参数,gcc这里有个编译器参数 -fshort-enums,如果我们在编译的时候加上这个,那么编译出来是什么呢?

短枚举的输出结果

最终结果变成了1

现在我在原先的代码中,加入CMD_MAX_16BIT = 0xFFFF,下面看看输出结果是多少。

增带值范围

运行输出结果如下:

输出结果

是的,它变成了2。因此我们可以得出结论就是:

编译器将为枚举分配足够的内存大小,来保存我们所声明的任何值。所以,如果我们的代码中只使用低于 256(8位的范围是0~255) 的值,我们的枚举应该是 8 位宽,也就是一个字节,而后面的0xFFFF显然是16位,两个字节,所以最终输出为2

为此我参考了一下gcc user manual,如下;

https ://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html

-fshort-enums

Allocate to an enum type only as many bytes as it needs for the declared range of possible values. Specifically, the enum type is equivalent to the smallest integer type that has enough room.

Warning: the -fshort-enums switch causes GCC to generate code that is not binary compatible with code generated without that switch. Use it to conform to a non-default application binary interface.

所以,我们需要明确的是编译器是否会默认执行 -fshort-enums这个命令,大多数是不会的,这里我还测试了一些clang,具体结果和gcc相同。

但是在嵌入式编程中需要注意,这里我查了一下,IAR的编译器默认会执行 -fshort-enums 。

电脑上没有IAR,这里我参考了IAR 的 ARM C 编译器的文档IAR C/C++ Development Guide

可以看到enum类型默认的规定,如果要强制为int类型的话,需要编译的时候提那就--enum_is_int的编译参数,如下所示;

枚举类型

所以这里为了避免编译器的优化,以及不同的硬件平台和不同编译器,从而导致枚举分配内存空间的变化,所以上述增加了一个0xFFFFFFFF,强制编译器为枚举分配4个字节的空间。

设置最大范围为4字节

最终的输出结果都是4,如下图所示;

输出结果比较

看来虽然是一个很小的知识点,但是这中间的坑还真不少,好了,本期的文章就到这里了,我们下期再见。

如果感觉文章帮到了您,动手三连,让文章帮到更多的人。

最后

🫵兄弟们!一个人单打独斗确实能冲得挺快,但要想走得更远、更稳,还得靠一群志同道合的伙伴啊!

👊 麦鸽的知识星球现在已经聚集了一波人,大家都在这里互相学习、共同进步。


如果你也想找个靠谱的学习圈子,赶紧   戳链接 🔗 加入我们吧!

在这里,你能读到星球专栏的干货,优质教程,练手项目,随时向麦鸽提问,还能帮你定制学习计划。别犹豫了,兄弟,一起冲!💪



往期推荐



血泪警告,嵌入式开发者滥用全局变量的几个"致命陷阱",第3个坑过所有新人!

从编译下载到运行:STM32到底是如何通过程序控制硬件

嵌入式C的GOTO语句陷阱:为什么Linux内核用它,你却要慎用?

最新!中国芯片设计公司100强完整名单(附详细产业地图)

小麦大叔 一位热衷技术的攻城狮,懂点技术,会讲故事,交个朋友?
评论
  • 一、前言在当今互联网应用中,网络编程是 Java 开发者必须掌握的一项关键技能。无论是构建聊天系统、文件传输、物联网交互,还是服务端 API 通信,Java 的网络编程提供了强大的支持。本文将从基础的 Socket 通信开始,逐步深入到多线程服务器开发,并提供图文实例帮助理解。二、Java 网络通信的基础概念Java 网络编程主要依赖于以下核心类:类名用途Socket客户端通信套接字ServerSocket服务器监听套接字InetAddressIP 地址解析与封装DatagramSocketUD
    小菜菜编程 2025-06-10 23:20 5851浏览
  • 电路图GPIO的中断类型相关API函数应用举例总结电路图在ESP32中内部有完整的控制电路,比如上下拉以及滤波器等,所以我们这里可以直接用一个微动开关连接到地。GPIO的中断类型GPIO_INTR_DISABLE不使能中断GPIO_INTR_POSEDGE上升沿触发GPIO_INTR_NEGEDGE下降沿触发GPIO_INTR_ANYEDGE上升沿和下降沿都触发GPIO_INTR_LOW_LEVEL低电平触发GPIO_INTR_HIGH_LEVEL高电平触发在GPIO中断应用中,一般使用上升沿或
    二月半 2025-06-12 10:11 242浏览
  • 一、前言文件处理是 Java 应用程序中最常见、最实用的功能之一,无论是读取配置文件、处理日志、批量处理 CSV,还是备份、压缩文件,都离不开对文件的高效操作。本篇文章将系统讲解 Java 文件操作的各个方面,包括文件读取、写入、复制、删除、压缩等,并提供实际代码示例。二、Java 文件与目录的基础操作2.1 使用 File 类检查文件属性java复制编辑import java.io.File; publicclassFileCheck { publicstaticvoidmai
    小菜菜编程 2025-06-10 22:34 6202浏览
  • 七年前买了个远程控制开关,想想那个时候应该物联网才兴起的时候吧。如今因为控制麻烦且经常出现连接掉线问题,于是给淘汰了。这个设备我是拿来控制吊灯,特别麻烦的是,当晚上关灯后,会有一点灯点亮着,掉线的时候还会闪,想想睡梦中醒来往天花板一看,一个东西在那闪多吓人,关键还是绿色的。而且二次匹配需要打开灯罩,按那个黑色的按钮才能重新配网。种种原因,让我今天给他拆了,结构也简单,拆开外壳就只有一个主板正面正面电路看起来还是很简单的:220V经过整流桥(背面U1),通过变压器将市电转化低压直流电一个继电器,这
    二月半 2025-06-12 14:32 278浏览
  • 夸克发布首个高考志愿大模型,为考生提供了智能化、个性化的志愿填报服务,这一创新对考生群体和传统报考机构产生了截然不同的影响。对于考生而言,夸克高考志愿大模型无疑是一大利好。该模型整合了教育官网、省招生办官网等权威信息源,确保数据准确可信,同时将高校毕业生就业信息、产业趋势等纳入知识库,为考生提供更全面的参考。通过深度搜索、志愿工具和志愿报告三大服务,夸克能精准理解考生需求,提供从专业适配性、地域优势到就业前景的全方位分析,并生成专属志愿报告和多种填报策略。这种智能化、个性化的服务大大减轻了考生和
    curton 2025-06-12 17:24 5893浏览
  • 一、前言Java 除了广泛用于后端开发与跨平台服务,也支持图形用户界面(GUI)的开发。对于需要构建桌面应用、工具软件、图形交互系统的场景,Java 的 GUI 框架(如 Swing、JavaFX)提供了丰富的组件和事件机制。本文将带你入门 Swing GUI 开发,并通过一个实战项目,构建一个简单但完整的 Java 桌面应用。二、Java GUI 技术体系概览Java 支持多种 GUI 开发方式,最常见有:技术特点AWT最早的 GUI,依赖本地组件,跨平台性差SwingAWT 的增强版,组件完
    小菜菜编程 2025-06-10 23:21 6067浏览
  • 1.03" CVBS 驱动方案 Micro-OLED显示技术因其高分辨率、高亮度、低功耗和小体积的优势,已成为微显示领域的首选方案。针对Micro-OLED在光学瞄准、夜视成像、工业检测、安防监控及户外探索等终端应用,上海冠显光电(TDO)设计开发了1.03"CVBS驱动方案。这一方案能够实现CVBS信号向Micro-OLED显示屏的稳定转换和显示控制,与市面上大多数光学瞄准应用终端无缝对接,满足行业对高质量、高性能显示解决方案的迫切需求。方案组成型号:TV103F1CSFS02&nb
    冠显光电MicroOLED代理视涯 2025-06-11 16:48 4664浏览
  • 一、引言:Java I/O 的重要性无论是桌面软件、服务器后台,还是移动应用,文件读写和数据传输都是核心功能。Java 提供了丰富的 I/O API,从传统的字节流、字符流到现代的 NIO(Non-blocking I/O)框架,都能满足不同场景的需求。本文将深入解析 Java I/O 的核心机制和实战技巧,涵盖:传统流体系(InputStream/OutputStream,Reader/Writer)文件操作示例NIO 基础与实战高效文件复制与缓冲机制二、Java 传统 I/O:字节流和字符流
    小菜菜编程 2025-06-10 21:57 5843浏览
  • Micro OLED作为下一代微显示技术的核心,广泛应用于AR/VR等HMD、汽车HUD、电子枪瞄、以及工业和医疗等高分辨率近眼显示领域。当前,Micro OLED的市场规模持续扩大,商业化进程不断加速,终端应用厂商急需加快产品验证步伐,抢占市场先机。为助力加速设计和开发,冠显光电推出了TV系列评估套件,帮助客户快速启动相关应用开发,提升验证效率,推动产品从概念到市场的快速落地。冠显0.39" Micro OLED显示解决方案主要包括0.39" 显示屏、FPC及驱动板,是TV系列中最小巧紧凑的一
    冠显光电MicroOLED代理视涯 2025-06-12 09:54 4001浏览
  • 在自动驾驶时代奔涌向前的路上,仿真测试早已不再是可选项,而是验证智能驾驶系统安全性、鲁棒性和泛化能力的刚需,如何提升仿真测试的保真度已成为无法避免的重要话题。这正是“数字孪生”出现的时代背景。本文为大家详细介绍如何用传统与前沿结合的数字孪生构建流程,再配合3DGS 的神经网络重建技术,为自动驾驶仿真测试注入真正的“现实之眼”。一、从点云到高精地图的重建依托独家的aiData工具链与aiSim仿真平台,本文建立了一套高精度数字孪生地图构建流程,已经广泛应用于布达佩斯 Kolosy广场、ZalaZo
    康谋 2025-06-11 14:13 283浏览
  • 磁学为啥神秘?1.磁学应用不直观。2.电感器使用量相对少。3.深度阐述书籍资料比较少。主要内容:第一章介绍磁学的基础概念,电磁感应,磁心损耗,气隙,趋肤效应,临近效应。第二章介绍磁性元件 电感原理与制造工艺,磁珠,变压器原理。第三章介绍应用电路 LC滤波器,谐振电路,射频中电感和变压器的应用,开关电源中变压器的应用。第四章介绍磁能的形态及转换,主要讲磁能存在哪里?转换过程,转换条件。第五章简介电感储能的相关问题,纠正常识性错误。第六章介绍变压器的常识性知识,如功率与初级匝数的关系。本书的阐述角度
    cow74562014 2025-06-10 22:41 284浏览
  • 一、前言多线程是 Java 的强大特性之一,它允许程序并发执行多个任务,提高资源利用率和响应能力。无论是 Web 服务、高性能计算、文件下载、图像处理,还是后台任务调度,多线程都是提升效率的利器。本篇文章将深入介绍 Java 多线程编程,包括创建线程、同步控制、线程通信、线程池与实际案例。二、Java 创建线程的三种方式2.1 方式一:继承 Thread 类java复制编辑publicclassMyThreadextendsThread { publicvoidrun() {
    小菜菜编程 2025-06-10 22:35 6712浏览
  • 近年来,随着全球能源转型和清洁能源行业的快速发展,户用光伏系统的装机量正呈逐年上升态势。同时,为了应对居民用电价格的显著上涨以及峰谷电价差异的持续扩大,在户用储能单元可大幅降低用电成本的背景下,各国正在大力扶持光伏配储政策,户用光储系统已逐步成为普通家庭应对电价波动与电网停机的经济之选。据高工产研储能研究所(GGII)统计数据显示,2024年全球户用储能装机规模约14GWh,GGII预计2025年全球户用储能市场规模将以25%的增速发展,装机规模将达到17.5GWh,整体增长趋势显著。而这也从侧
    华普微HOPERF 2025-06-12 14:16 446浏览
  • 检测电磁铁性能需要系统性地考察多个关键指标。首先通过吸附测试评估磁力强度,可定量测量最大吸附重量或定性观察衔铁动作的灵敏性。电气参数检测包括测量线圈电阻值是否正常,以及通电后电流是否稳定在额定范围内。动态性能方面需测试响应时间和释放特性,记录通电吸合与断电分离的时效性。环境适应性验证要模拟电压波动和高温条件,观察磁力稳定性变化。安全检测环节必须检查绝缘状态和接线可靠性,运行中注意异常发热、异响等故障征兆。日常维护应保持磁极面清洁,定期复测线圈电阻。专业应用场合建议使用磁通计等仪器精确测量磁场参数
    锦正茂科技 2025-06-12 11:20 3889浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦