【发布时间】:2012-07-29 15:08:27
【问题描述】:
我已经编写了使用#pragma 指令对齐的代码,但我无法理解对齐是如何发生的。 我在 ubuntu 上使用 gcc。
#include<stdio.h>
#define MALE 0;
#define FEMALE 1;
#define SINGLE 0;
#define MARRIED 1;
#pragma pack(3);
int main()
{
struct emp
{
unsigned gender :1;
unsigned mar:1;
unsigned hobby:1;
unsigned scheme :1;
};
struct emp e;
e.gender=MALE;
e.mar=SINGLE;
e.hobby=1;
e.scheme=1;
printf("size of %d",sizeof(e));
return 0;
}
当我使用#pragma pack as 1 时,size 为 1,#pragma pack as 2 size 为 2,3 为 4。
你能告诉我发生了什么吗?如果我不使用它仍然是 4 来。
那么#pragma pack(1) 和#pragma pack(2) 有什么区别?
【问题讨论】:
-
3 对于
pragma pack无效。看看here -
我想知道,当我写 #pragma pack(1) 时,它会设置第一位,然后从下一位开始设置第二位,如果我写 #pragma(2) ,有什么区别
-
您不希望在
#define行的末尾使用分号。您可能也不希望#pragma行末尾的分号。
标签: c