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

jhy*_*jhy 4 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))
Run Code Online (Sandbox Code Playgroud)

Cam*_*ron 12

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

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

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