我已經使用#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