Jay*_*esh 7 c macros c-preprocessor
C #pragma和_Pragma()C 之间有什么区别?
句法:
#pragma arg
Run Code Online (Sandbox Code Playgroud)
和
_Pragma(arg)
Run Code Online (Sandbox Code Playgroud)
我应该什么时候使用_Pragma(arg)?
msc*_*msc 12
_Pragma运营商介绍C99._Pragma(arg)是一个运算符,很像sizeof或者defined,可以嵌入到宏中.
根据cpp.gnu.org参考:
它的语法是
_Pragma(string-literal);
其中string-literal可以是普通字符串文字或宽字符字符串文字.通过将所有\替换为单个\并将所有\"替换为"来对其进行细化.然后处理结果,好像它出现在#pragma指令的右侧.例如,
Run Code Online (Sandbox Code Playgroud)_Pragma ("GCC dependency \"parse.y\"")例如,使用宏可以实现相同的效果
Run Code Online (Sandbox Code Playgroud)#define DO_PRAGMA(x) _Pragma (#x) DO_PRAGMA (GCC dependency "parse.y")
根据IBM教程:
_Pragma运算符是指定#pragma指令的另一种方法.例如,以下两个语句是等效的:
Run Code Online (Sandbox Code Playgroud)#pragma comment(copyright, "IBM 2010") _Pragma("comment(copyright, \"IBM 2010\")")编译以下代码时,将字符串IBM 2010插入到C++目标文件中:
Run Code Online (Sandbox Code Playgroud)_Pragma("comment(copyright, \"IBM 2010\")") int main() { return 0; }
从这里:
Pragma指令指定特定于机器或操作的编译器功能.__pragma关键字(特定于Microsoft编译器)使您能够在宏定义中编写pragma指令.
另外(同一个链接):
__pragma()关键字
微软具体
编译器还支持
__pragma关键字,该关键字具有与#pragma指令相同的功能,但可以在宏定义中内联使用.该#pragma指令不能在宏定义中使用,因为编译器将指令中的数字符号字符('#')解释为字符串化运算符(#).
所以基本上你总是可以使用#pragma而不是__pragma().有没有必要使用__pragma(),但它可以被使用,有时.