keil c51枚举类型的大小不固定,在通讯中需注意

2020-01-26 12:57发布

以下是keil 帮助中的说明
The data type enum adjusts automatically 8 or 16 bits
If an enum can be represented with an 8-bit value, the enum is also stored in a single byte.
枚举类型会被自动调整成8位或者16位,实际优化过程中枚举类型的大小是由枚举类型中长度最大的常量指定,但不会超过16位。
比如
  1. typedef enum _tagComFlg_typ //通讯协议规定的数据标志,大小为1个字节
  2. {
  3.         START_FLG =      0x1B,      //消息开始标志
  4.         TOKEN_FLG =     0x0E,            //分隔符标志
  5. }ComFlg_typ;
复制代码上述枚举类型的存储空间为一个字节即8位,如做以下改动就变成了两个字节即16位。
  1. typedef enum _tagComFlg_typ //通讯协议规定的数据标志,大小为1个字节
  2. {
  3.         START_FLG =      0x1B,      //消息开始标志
  4.         TOKEN_FLG =     0x110E,            //分隔符标志
  5. }ComFlg_typ;
复制代码这种自动优化,在通讯时需注意,否则可能会引起较难发现的错误。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
tragedy
1楼-- · 2020-01-26 15:50
菜鸟帮顶,枚举为啥要这样用。。。
ijlc1314
2楼-- · 2020-01-26 19:42
 精彩回答 2  元偷偷看……
ndust
3楼-- · 2020-01-26 20:48
感谢楼主经验。
要不说汇编是基础,C是效率。掌握原理你就是大神。
guowanling8061
4楼-- · 2020-01-26 23:25
此话经典“要不说汇编是基础,C是效率。掌握原理你就是大神”

一周热门 更多>