在结构体中定义宏定义意义

 第一次看见在结构体中有宏定义,开始有点迷糊,想到该结构是如何存储的?宏定义会是不会多次编译?以下是我看的一个列子:

typedef struct

{
  #define XCP_AUTHORIZED_BIT      0x01

  uint16_t XcpAuthorizedBit:1;  


  #define BLOCK_RESPONSE          0x02

  uint16_t XcpBlockResponseBit:1; 


  #define XCP_NO_C9              0x04

  uint16_t XcpNoC9:1;       


  #define XCP_MODEM_AUTH_BIT      0x08

  uint16_t XcpModemAuthBit:1;   


  #define XCP_SYS_SUBM_BIT        0x10

  uint16_t XcpSysSubmBit:1;     


  #define XCP_IN_SEQUENCE         0x20   

  uint16_t XcpInSequence:1;    


  #define XCP_SAFEKEY_REQUEST     0x40

  uint16_t XcpSafeKeyRequestBit:1;


  uint16_t :0;                

}

在这里我们要明白的是预编译与编译两者的区别:宏定义是在预编译时就会去找到相应的常量去替换,就是在编译成目标文件之前已经进行了替换,所以这里在结构体中有宏定义不会被重复编译,也就不可能为结构体中的宏定义分配内存一说。

作用域还是开始于#define,结束于#undef,没有什么只作用于结构体之内。

把宏定义放在结构体中,按我看的代码来看应该是为了更加直观,让人一看就知道改结构体中的个标志位是什么,被定义在哪一位 ,以便于运算。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页