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;
复制代码这种自动优化,在通讯时需注意,否则可能会引起较难发现的错误。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。