请教看不懂的宏定义
#define u8 unsigned char
#define MC_PCC_FILL_STRUCT1 u8:0;u8:8;u8:0;
#define MC_PCC_FILL_STRUCT2 u8:0;u8:8;u8:8;u8:0;
#define MC_PCC_FILL_STRUCT3 u8:0;u8:8;u8:8;u8:8;u8:0;
下面的三条宏,在结果题里面出现过,这样的定义不知道该怎么样去理解。
[解决办法]
大概是为了字节对齐填充没用字节用的,分别填充1-3个字节
[解决办法]
结构体字节对齐用的,
typedef struct {
struct {
u8 v_ClirSelect;
u8 v_SemicolonFound:1;
MC_PCC_FILL_STRUCT2
} s_Flags;
中MC_PCC_FILL_STRUCT2为#define MC_PCC_FILL_STRUCT2 u8:0;u8:8;u8:8;u8:0;
u8:0是为了上填充上一个字节剩余位,如果没有剩余位则不填充。比如这里MC_PCC_FILL_STRUCT2的第一个u8:0就填充了7位,这样组合起来就是4字节对齐了。
t_aki_ParamList a_ParamList[AKI_PARAM_LENGTH];
ascii a_Command[AKI_CMD_LENGTH];
u16 v_ParserLocalIndex;
u8 v_ExtendedCommand;
u8 v_CommandType;
u8 v_NumberOfParam;
u8 v_IsAbortableCommand;
MC_PCC_FILL_STRUCT2 //?????类似这样的写法出现了,我猜也是位定义,但是起到什么作用了?
}t_aki_DecodedCommand;
这里t_aki_ParamList a_ParamList[AKI_PARAM_LENGTH];
ascii a_Command[AKI_CMD_LENGTH];应该都是4字节对齐了。
接着就是一个u16四个u8,所以还需要填充2个字节来4字节对齐。
所以用MC_PCC_FILL_STRUCT2来填充对齐。
感觉这种对齐的方法风格不好。