什么是__pragma以及__pragma和#pragma之间有什么区别

时间:2014-05-21 17:29:34

标签: c++ macros

以下宏让我困惑。我想知道什么是__pragma以及__pragma和#pragma之间的区别是什么。

#define OPENVDB_START_THREADSAFE_STATIC_WRITE       __pragma(warning(disable:1711))
#define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE      __pragma(warning(default:1711))

1 个答案:

答案 0 :(得分:12)

#pragma本身就是一个预处理器指令;它不能在#define指令中使用。

因此,这就是__pragma存在的原因:它提供了一种方法,可以从扩展使用它的宏的任何地方发出编译指示。

这是一个非标准的编译器扩展(MSVC,Intel和一些C编译器在不同程度上支持它)。另请参阅较新版本的C / C ++标准中定义的_Pragma operator(并且具有相同的用途,但语法略有不同)。