1、在变量前加(void)强转
sys_msg_key_data_t *key_msg;
(void)(key_msg);
这只是一种防止编译器编译时报警告的用法。有些变量如果未曾使用,在编译时是会报错,从而有些导致编译不过,所以才会出现这种用法。而此语句在代码中没有具体意义,只是告诉编译器该变量已经使用了。
2、#pragma pack(1)使用
编译器将结构体数据强制连续排列,例如下列代码
#pragma pack(1)
struct s {
char ch;
int i;
};
#pragma pack()
加了#pragma pack(1)后,结构体长度为5,没加时是8。
编译器为了让程序跑得跟快,减少CPU读取数据的指令周期,对结构体的存储进行了优化。实际上第一个char型成员虽然本来只有1个字节,但实际上却占用掉了4个字节,为的是让第二个int型成员的地址能够被4整除。因此实际占用的是8个字节。