首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问看不懂的宏定义

2012-05-23 
请教看不懂的宏定义#define u8 unsigned char#define MC_PCC_FILL_STRUCT1 u8:0u8:8u8:0#define MC_PCC

请教看不懂的宏定义

#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来填充对齐。

感觉这种对齐的方法风格不好。

热点排行