问题:
做嵌入式的有时候会在代码中遇到
#pragma pack (n)
struct naturalalign
{
char a;
int b;
char c;
};
#pragma pack ()
说明:
①使用伪指令#pragma pack (n),编译器将按照 n 个字节对齐
②使用伪指令#pragma pack (),取消自定义字节对齐方式。
③注意: 如果#pragma pack (n)中指定的 n 大于结构体中最大成员的 size,则其不起作用,结构体仍然按照 size 最大的成员进行对界。
小小的测试
struct structA{
int a;
char b;
};
struct structB{
char a;
short b;
};
struct structC{
int a;
char b;
float c;
};
#pragma pack(2)
struct structD{
char a;
char c;
int b;
};
#pragma pack()
#pragma pack(2)
struct structE{
char a;
int b;
char c;
};
#pragma pack()
void main(void)
{
printf("sizeof(float):%d\n",sizeof(float));
printf("struct A:%d\n",sizeof(struct structA));
printf("struct B:%d\n",sizeof(struct structB));
printf("struct C:%d\n",sizeof(struct structC));
printf("struct D:%d\n",sizeof(struct structD));
printf("struct E:%d\n",sizeof(struct structE));
}
在KEIL平台得到的答案