結構體對齊預處理指令

2021-07-15 02:38:02 字數 822 閱讀 3725

方式一:

/*

n可以取以下5個數中的任意乙個:1,2,4,8,16

來自定義結構體成員的對齊方式

*/#pragma pack(n)

//這裡放置結構體

#pragma pack ()//取消自定義位元組對齊方式

方式二:

/*

n可以取以下5個數中的任意乙個:1,2,4,8,16

來自定義結構體成員的對齊方式

*/#pragma pack(push,n)

//這裡放置結構體

#pragma pack(pop) //編譯器到編譯到此處時將恢復原來的對齊狀態

------------注意--------------

#pragma pack(push) //儲存對齊狀態

#pragma pack(4)//設定為4位元組對齊

相當於 #pragma pack(push,4)

typedef

struct userinfo yf_userinfo;

以上結構體的總大小是12位元組,其中第乙個char型本應該是1個位元組的,但是系統為了提高效能,對結構體進行了對齊,使其擁有4個位元組的空間大小。

#pragma pack(push,1)

typedef struct userinfo yf_userinfo;

#pragma pack(pop)

設定結構體按乙個位元組對齊,此時系統不再對結構體進行自動對齊,結構體中的成員佔空間大小由自身的型別來決定,系統不再干預。

預處理,結構體

q 巨集定義的定義和型別。a 巨集定義是由源程式中的巨集定義命令完成的,巨集代換是由預處理程式自動完成的,在 c語言中,巨集定義分為有參和無參兩種。無參巨集巨集名後不帶引數,其定義的一般形式為 define 識別符號 字串 帶參巨集的引數為形參,其一般形式為 define 巨集名 形參表 字串。q ...

預處理與結構體

巨集定義 檔案包含 條件編譯1 巨集定義不是說明或語句,不需要在結尾加上分號 2 巨集定義必須寫在函式之外,其作用域是巨集定義命令起到源程式結束,如需要終止可使用 undef命令 3 預處理程式不對巨集定義做任何檢查,如有錯誤,只能在編譯被巨集定義展開後的源程式時發現1 巨集會在編譯器在對源 進行編...

預處理和結構體2

q 結構體的作用及其優勢。a struct將相關聯的資料打包成乙個整體,方便使用,我們將多種資料組合起來的整體稱為結構體。結構體可以很好的將需要傳送的內容儲存在乙個整體中,同時結構體也可以壓縮函式引數個數。q 結構體和陣列的比較。a 同 都由多個元素組成 各元素在記憶體中的儲存空間是連續的 異 陣列...