将多个 pragma 指令放入一个预处理器定义中
Put multiple pragma directives into one preprocessor define
我的代码中需要 push/pop 几个 gcc 诊断。如果在单个文件中需要这样做,我会执行以下操作:
#pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wformat"
#pragma GCC diagnostic error "-Wuninitialized"
...some code...
#pragma GCC diagnostic push
但我需要在多个位置使用它。所以我想要一个#define 或类似的东西。我考虑了以下内容,但 C 预处理器不允许 #define 中的#pragmas。
#define PushWarnings \
#pragma GCC diagnostic push \
#pragma GCC diagnostic error "-Wformat" \
#pragma GCC diagnostic error "-Wuninitialized"
有办法实现吗?
是的,有办法做到这一点。 C99 引入了 _Pragma
运算符(自 C++11 起在 C++ 中也可用)。
等编译指示
#pragma GCC diagnostic error "-Wformat"
也可以写成
_Pragma("GCC diagnostic error \"-Wformat\"")
后者不是 #
预处理器指令,因此可以从宏生成:
#define PushWarnings \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic error \"-Wformat\"") \
_Pragma("GCC diagnostic error \"-Wuninitialized\"")
我的代码中需要 push/pop 几个 gcc 诊断。如果在单个文件中需要这样做,我会执行以下操作:
#pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wformat"
#pragma GCC diagnostic error "-Wuninitialized"
...some code...
#pragma GCC diagnostic push
但我需要在多个位置使用它。所以我想要一个#define 或类似的东西。我考虑了以下内容,但 C 预处理器不允许 #define 中的#pragmas。
#define PushWarnings \
#pragma GCC diagnostic push \
#pragma GCC diagnostic error "-Wformat" \
#pragma GCC diagnostic error "-Wuninitialized"
有办法实现吗?
是的,有办法做到这一点。 C99 引入了 _Pragma
运算符(自 C++11 起在 C++ 中也可用)。
#pragma GCC diagnostic error "-Wformat"
也可以写成
_Pragma("GCC diagnostic error \"-Wformat\"")
后者不是 #
预处理器指令,因此可以从宏生成:
#define PushWarnings \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic error \"-Wformat\"") \
_Pragma("GCC diagnostic error \"-Wuninitialized\"")