標籤:
#pragma是一種預先處理指令,作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。
其格式一般為:#pragma Para。其中Para為參數。下面是一些常見用法。
1、message
——在編譯資訊輸出視窗中輸出相應資訊。
例:#ifdef _X86
#pragma message("_X86 macro activated!")
#endif
2、once
——保證標頭檔只被編譯一次
#pragma once與#ifndef / #define / endif 區別:
1)#pragma once與編譯相關,移植性差,不過現在基本上每個編譯器都有這個定義;
2)#pragma once如果標頭檔有多份拷貝,不能保證它們不被重複包含;
3)#ifndef / #define / endif 是C++語言相關,所有支援C++語言的編譯器都有效,移植性好;
4)#ifndef / #define / endif 通過宏定義避免檔案多次編譯,這不僅保證同一檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被不小心同時包含。
3、warning
——修改編譯器的警告訊息的行為
#pragma warning(push)--儲存所有警示資訊的現有警示狀態
#pragma warning(disable:4507 34)--不顯示4507和34號警告資訊
#pragma warning(once:4835)--4835號警告資訊僅報告一次
#pragma warning(error:164)--把164號警告資訊作為一個錯誤
#pragma warning(disable:4507 34; once:4835; error:164)--綜上
#pragma warning(pop)--向棧中彈出最後一個警示資訊,在入棧和出棧間所作的一切改動取消
4、comment
——將一個注釋記錄放入一個對象檔案或可執行檔中
指令格式:#pragma comment(comment-type [, "comment-string"])
comment-type是一個預定義標識符,指定注釋類型,是compiler、exestr、lib、linker之一;
comment-string是一個為comment-type提供附加資訊的字串。
最常用的是:#pragma comment(lib, "*.lib")--連結指定庫
5、pack
——設定位元組對齊長度
實際使用規則:結構、聯合或類的資料成員,第一個放在位移為0的地方,以後每個資料成員的對齊,按照#pragma pack指定的數值和這個資料成員自身長度中,比較大的那個進行。但是當前者設定的值等於或超過最長資料成員的長度時,這個值的大小將不產生任何效果。而 結構整體的對齊,則按照結構體中最大的資料成員和#pragma pack指定值之間較小的那個進行。
#pragma pack(show)--以警告資訊的形式顯示當前位元組對齊的值
#pragma pack(push)--將當前位元組對齊值壓入編譯棧棧頂
#pragma pack(n)--將當前位元組對齊值設為n
#pragma pack(push, n)--綜上兩句
#pragma pack(pop)--將編譯棧棧頂的位元組對齊值彈出並設為當前值
#pragma pack()--將當前位元組對齊值設為預設值(通常是8)
#pragma用法