一 C语言中枚举所占多少字节呢?
这个问题最近一个项目中,遇到了才进行总结。看来很多问题,踩坑了才知道珍惜啊。
二 实例解析
#include <stdio.h> typedef enum { IIR_TYPE_LOW_SHELF = 0, IIR_TYPE_PEAK, IIR_TYPE_HIGH_SHELF, IIR_TYPE_LOW_PASS, IIR_TYPE_HIGH_PASS, IIR_TYPE_NUM } IIR_TYPE_T; typedef enum { IIR1_TYPE_LOW_SHELF = 0xfffffffff, IIR1_TYPE_PEAK, IIR1_TYPE_HIGH_SHELF, IIR1_TYPE_LOW_PASS, IIR1_TYPE_HIGH_PASS, IIR1_TYPE_NUM } IIR1_TYPE_T; int main() { printf("sizeof IIR ENUM is:%d \n\r",sizeof(IIR_TYPE_T)); printf("sizeof IIR ENUM1 is:%d \n\r",sizeof(IIR1_TYPE_T)); return 0; }
结果:
➜ enum_test git:(master) ✗ ./test sizeof IIR ENUM is:4 sizeof IIR ENUM1 is:8
三 总结
A 枚举的大小是按照enum中元素最大值所占的内存大小来决定的,不像结构体那样有多少个元素就按各个元素所占字节叠加。
B 当枚举成员的值小于4个字节时,占4个字节。
C 当枚举成员的值大于4个字节时,最大只能是longlong类型,占8个字节。
可见枚举类型的大小会随着其中的元素的大小而发生变化,虽然几乎没有人会用这么大的数来作为枚举,但起码我们得知道枚举类型字节数的大小是有可能发生改变的,所以到程序中有数据需要和别的程序进行交流,譬如上位机和下位机的通信数据,就尽量不要在数据包中包含有枚举类型,以免发生歧义。
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2022-05-18 Apollo3 Blue SoC 和 Apollo3 Blue Plus SoC的区别
2018-05-18 路人甲的主角梦
2018-05-18 ubuntu 16.04 下更换boost版本