C中#pragma和_Pragma()之间的区别

时间:2017-08-03 07:16:55

标签: c macros c-preprocessor

C中的#pragma_Pragma()有什么区别?

语法:

#pragma arg

_Pragma(arg)

我应该何时使用_Pragma(arg)

2 个答案:

答案 0 :(得分:12)

_Pragma中引入了

C99运算符。 _Pragma(arg)是一个运算符,与sizeofdefined非常相似,可以嵌入到宏中。

根据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(),但有时可以使用