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

7

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

有没有实现这个的方法?


@EdHeal 你所说的“fix”是什么意思? - melpomene
1
代码正在启用警告(或者说将它们转换为错误),而不是禁用它们。 - melpomene
@melpomene - 编译代码时,使所有警告都成为错误,不需要再玩弄那些没有保护的代码位。 - Ed Heal
1
为什么不修复代码,以便这些警告不再触发? - Jesper Juhl
@EdHeal 有时候是外部代码,你无法触及。 - melpomene
这是针对外部代码的。 - Paul
1个回答

12

是的,有一种方法可以做到这一点。 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\"")

太好了。很高兴学习关于_Pragma的知识。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接