第一次看见在结构体中有宏定义,开始有点迷糊,想到该结构是如何存储的?宏定义会是不会多次编译?以下是我看的一个列子:
typedef struct
{#define XCP_AUTHORIZED_BIT 0x01
uint16_t XcpAuthorizedBit:1;
uint16_t XcpBlockResponseBit:1;
uint16_t XcpNoC9:1;
uint16_t XcpModemAuthBit:1;
uint16_t XcpSysSubmBit:1;
uint16_t XcpInSequence:1;
uint16_t XcpSafeKeyRequestBit:1;
uint16_t :0;
}
在这里我们要明白的是预编译与编译两者的区别:宏定义是在预编译时就会去找到相应的常量去替换,就是在编译成目标文件之前已经进行了替换,所以这里在结构体中有宏定义不会被重复编译,也就不可能为结构体中的宏定义分配内存一说。
作用域还是开始于#define,结束于#undef,没有什么只作用于结构体之内。
把宏定义放在结构体中,按我看的代码来看应该是为了更加直观,让人一看就知道改结构体中的个标志位是什么,被定义在哪一位 ,以便于运算。