C中#pragma
和_Pragma()
之間的區別是什麼?C中#pragma和_Pragma()之間的差異
語法:
#pragma arg
和
_Pragma(arg)
何時應該使用_Pragma(arg)
?
C中#pragma
和_Pragma()
之間的區別是什麼?C中#pragma和_Pragma()之間的差異
語法:
#pragma arg
和
_Pragma(arg)
何時應該使用_Pragma(arg)
?
從here:
Pragma指令指定機器或操作系統特定的編譯器功能。 特定於Microsoft編譯器的__pragma關鍵字使您能夠在宏定義中對編譯指示進行編碼。
而且(同一個鏈接):
的__pragma()關鍵字
微軟特定
編譯器還支持
__pragma
關鍵字,它具有相同的功能的#pragma
指令,但可以在宏定義中內聯使用。#pragma
指令不能在宏定義中使用,因爲編譯器會將指令中的數字符號字符('#')解釋爲字符串化運算符(#)。
因此,基本上可以一直使用而不是#pragma
的__pragma()
。沒有必要使用__pragma()
,但它有時可以使用可以使用。
_Pragma
運營商介紹C99
。 _Pragma(arg)
是一個運算符,非常類似於sizeof
或defined
,並且可以嵌入宏中。
根據cpp.gnu.org參考:
其語法是
_Pragma(字串文本);
其中字符串文字可以是正常字符串或寬字符字符串 字面值。 通過將所有\用\ 全部替換爲\「 \」來刪除它。然後處理結果,就好像它出現在#pragma指令的右邊。例如,
_Pragma ("GCC dependency \"parse.y\"") has the same effect as #pragma GCC dependency "parse.y".
相同的效果可以通過使用宏來實現,例如
#define DO_PRAGMA(x) _Pragma (#x) DO_PRAGMA (GCC dependency "parse.y")
根據IBM tutorial:
的_Pragma操作是指定的替代方法#pragma 指令。例如,下面的兩個語句是等效的:
#pragma comment(copyright, "IBM 2010") _Pragma("comment(copyright, \"IBM 2010\")")
當 以下代碼被編譯IBM 2010被插入到C++目標文件中的字符串:
_Pragma("comment(copyright, \"IBM 2010\")") int main() { return 0; }
有關的詳細信息例如_pragma。
C標準提供'_Pragma'運算符作爲'#pragma'的替代方法。 '_pragma'很可能與供應商(微軟?)類似,但是特定的。 –