Keil MDK中enum类型数据大小的问题

嵌入式系统 时间:2023-12-18来源:欧工玩转嵌入式

  使用枚举是一个避免在程序中出现幻数的好方法,应该在代码中避免出现未解释的数值。在单片机编程中,尤其是在编写通信协议时,常常使用枚举来定义诸如命令等字段。这时有个问题就必须要提出了,C语言中enum类型到底占多少字节?我们给命令字段预留的字节大小必须和enum类型大小一致才能保证通信协议在字节流层面上正确。
  关于enum类型究竟占用多少字节,答案是不确定。C语言标准规定枚举必须是整数类型,但却没有规定枚举类型必须占多少字节。枚举类型占用多少字节,取决于每个编译器的实现。有可能占8字节,16字节,32字节,甚至64字节。其他编译器我们不做讨论,下面只介绍Keil MDK中enum类型大小的问题。

  Keil MDK中对enum类型大小的分配原则是能够包含所有枚举元素的最小整形,即刚好够用的整形实现。什么意思呢?就是如果一个unsigned char能够包含枚举元素的所有情况,那就用unsigned char作为其大小。如果要unsigned int才能包含的话,那就以unsigned int作为其大小。下面用代码直观体现一下:

在char能包含枚举元素的情况下枚举大小为1字节

在int能包含枚举元素的情况下枚举大小为4字节

  上面只是简单说明。对于enum类型的大小和符号,Keil MDK有更详细的规定。在C模式或者不带--enum_is_int的C++模式下,如果枚举元素只包含正整数,那么enum的存储类型为下表第一个能匹配元素数值的unsigned类型。在其他模式或者枚举元素有负数的情况下,enum的存储类型为下表第一个匹配元素数值的signed类型:


关键词: Keil MCU enum

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版