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

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

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,没有什么只作用于结构体之内。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值