C中的#pragma
和_Pragma()
有什么区别?
语法:
#pragma arg
和
_Pragma(arg)
我应该何时使用_Pragma(arg)
?
答案 0 :(得分:12)
_Pragma
中引入了 C99
运算符。 _Pragma(arg)
是一个运算符,与sizeof
或defined
非常相似,可以嵌入到宏中。
根据cpp.gnu.org参考:
它的语法是
_Pragma(string-literal);
其中string-literal可以是普通字符串或宽字符字符串 文字。 通过用单个\替换所有\来解析它 所有“有一个”。然后处理结果,就像它出现了一样 #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的更多信息,请参见。
答案 1 :(得分:8)
来自here:
Pragma指令指定特定于机器或操作的编译器功能。 __pragma关键字(特定于Microsoft编译器)使您能够在宏定义中编写pragma指令。
另外(同一链接):
__pragma()关键字
Microsoft特定的
编译器还支持
__pragma
关键字,该关键字具有与#pragma
指令相同的功能,但可以在宏定义中内联使用。#pragma
指令不能在宏定义中使用,因为编译器会将指令中的数字符号字符('#')解释为字符串化运算符(#)。
所以基本上你总是可以使用#pragma
代替__pragma()
。无需使用__pragma()
,但有时可以使用 。