Pau*_*aul 1 c c++ pragma c-preprocessor
我需要在我的代码中推送/弹出几个gcc诊断程序.如果在单个文件中需要,我会执行以下操作:
#pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wformat"
#pragma GCC diagnostic error "-Wuninitialized"
...some code...
#pragma GCC diagnostic push
Run Code Online (Sandbox Code Playgroud)
但我需要在多个地方使用它.所以我想要一个#define或类似的东西.我想到了以下内容,但c预处理器不允许#define中的#pragmas.
#define PushWarnings \
#pragma GCC diagnostic push \
#pragma GCC diagnostic error "-Wformat" \
#pragma GCC diagnostic error "-Wuninitialized"
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
是的,有办法做到这一点.C99引入了_Pragma运算符(自C++ 11以来也可在C++中使用).
像一个pragma
#pragma GCC diagnostic error "-Wformat"
Run Code Online (Sandbox Code Playgroud)
也可以写成
_Pragma("GCC diagnostic error \"-Wformat\"")
Run Code Online (Sandbox Code Playgroud)
后者不是#预处理器指令,因此可以从宏生成:
#define PushWarnings \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic error \"-Wformat\"") \
_Pragma("GCC diagnostic error \"-Wuninitialized\"")
Run Code Online (Sandbox Code Playgroud)