2017-08-03 141 views
4

C中#pragma_Pragma()之間的區別是什麼?C中#pragma和_Pragma()之間的差異

語法:

#pragma arg 

_Pragma(arg) 

何時應該使用_Pragma(arg)

+2

C標準提供'_Pragma'運算符作爲'#pragma'的替代方法。 '_pragma'很可能與供應商(微軟?)類似,但是特定的。 –

回答

7

here

Pragma指令指定機器或操作系統特定的編譯器功能。 特定於Microsoft編譯器的__pragma關鍵字使您能夠在宏定義中對編譯指示進行編碼。

而且(同一個鏈接):

的__pragma()關鍵字

微軟特定

編譯器還支持__pragma關鍵字,它具有相同的功能的#pragma指令,但可以在宏定義中內聯使用。 #pragma指令不能在宏定義中使用,因爲編譯器會將指令中的數字符號字符('#')解釋爲字符串化運算符(#)。

因此,基本上可以一直使用而不是#pragma__pragma()。沒有必要使用__pragma(),但它有時可以使用可以使用

4

_Pragma運營商介紹C99_Pragma(arg)是一個運算符,非常類似於sizeofdefined,並且可以嵌入宏中。

根據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