我已经使用#pragma指令编写了一个代码来对齐,但我无法理解对齐是如何发生的。 我在Ubuntu上使用gcc。在c中使用#pragma pack但无法理解
#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为1
,大小出来是1的#pragma包作为2大小出来为2和3是4
你能告诉我发生了什么事?如果我不使用它,仍然有4个来。
那么#pragma pack(1)
和#pragma pack(2)
之间有什么区别?
3对'pragma pack'无效。看看[这里](http://msdn.microsoft.com/en-us/library/2e70t5y1(v = vs.80).aspx) – pmr 2012-07-29 15:12:34
我想知道,当我写#pragma pack(1)它设置第一位,然后从第二位开始第二位如果我编写#pragma(2),怎么区别 – 2012-07-29 15:28:34
你不希望'#define'行末尾有分号。您可能不希望在'#pragma'行末尾使用分号。 – 2012-07-29 16:17:55