以下宏让我困惑。我想知道什么是__pragma以及__pragma和#pragma之间的区别是什么。
#define OPENVDB_START_THREADSAFE_STATIC_WRITE __pragma(warning(disable:1711))
#define OPENVDB_FINISH_THREADSAFE_STATIC_WRITE __pragma(warning(default:1711))
答案 0 :(得分:12)
#pragma
本身就是一个预处理器指令;它不能在#define
指令中使用。
因此,这就是__pragma
存在的原因:它提供了一种方法,可以从扩展使用它的宏的任何地方发出编译指示。
这是一个非标准的编译器扩展(MSVC,Intel和一些C编译器在不同程度上支持它)。另请参阅较新版本的C / C ++标准中定义的_Pragma
operator(并且具有相同的用途,但语法略有不同)。