将多个pragma指令放入一个预处理器中定义[duplicate]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我需要在我的代码中推送/弹出几个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"

有没有办法实现这个目标?

c++ c c-preprocessor pragma
1个回答
5
投票

是的,有办法做到这一点。 C99引入了_Pragma运算符(自C ++ 11以来也可在C ++中使用)。

像一个pragma

#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\"")
© www.soinside.com 2019 - 2024. All rights reserved.