c++ - 什么是 __pragma 以及 __pragma 和 #pragma 之间的区别是什么

标签 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))

最佳答案

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

因此,这就是 __pragma 存在的原因:它提供了一种从使用它的宏展开的任何地方发出 pragma 的方法。

这是一个非标准的编译器扩展(MSVC、Intel 和一些 C 编译器都不同程度地支持它)。另见 _Pragma operator这是在较新版本的 C/C++ 标准中定义的(目的相同,但语法略有不同)。

关于c++ - 什么是 __pragma 以及 __pragma 和 #pragma 之间的区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23790112/

相关文章:

C++ 预处理器宏循环 __VA_ARGS__ 1 vs 2+ 参数

c++ - 在 QtCreator 中链接 SDL2

c++ - 琐碎的任务

c++ - undefined reference SDL with Code::Blocks

macros - 向 Clojure 的 defrecord 构造函数添加功能的推荐宏?

c - C宏中是否忽略了分号?

c++ - 使用唯一的指针调用函数会使我的程序崩溃

c++ - WaitCommEvent 挂起

c - 如何删除这些 C 宏之间的重复?

clojure - 如何在 Clojure 宏中包装异常?