有没有办法在 clang 或 gcc 中使用编译指示禁用所有警告?

Is there any way to disable all warnings with a pragma in clang or gcc?

提问人:ThreeBit 提问时间:6/2/2012 更新时间:11/15/2023 访问量:2595

问:

GCC 和 clang 允许您使用 -w 进行编译以禁用所有警告,但我看不到 #pragma 等效项。我只能看到对禁用单个文件的编译指示支持。

我需要这个,因为我有代码,我想编译具有高警告级别的代码,但必须编译生成任意警告的第三方代码。

GCC 警告叮 叮当当

评论

1赞 sarnold 6/2/2012
修改源代码似乎有点奇怪;为什么不通过不同的目标来处理这个问题呢?Makefile
2赞 Josh Heitzman 12/17/2012
如果能够通过编译指示在代码中执行此操作,则可以仅禁用需要禁用的代码周围的警告,而不是为整个翻译单元禁用它。它还允许您使用_Pragma有条件地执行此操作。

答:

1赞 Damon 6/2/2012 #1

你可以用 GCC 来做到这一点,几乎,使用 ,但不幸的是不是很好,看这里#pragma GCC diagnostic ignored

问题是你不能只是“全部禁用”,你必须禁用每一个。另外,对于某些警告,它不起作用(并且文档不会告诉您哪些......

我的猜测是,这有点初步,并且(希望)将在下一个版本中得到改进。

评论

1赞 Thomas 4/19/2018
#pragma GCC diagnostic ignored "-Wall"似乎对我有用。如果需要,请再添加一行(因为不是全部)。-Wextra-Wall
2赞 Autechre 9/30/2022
它不适用于 gcc 9.3
1赞 Stéphane 4/10/2023
在 g++ 11.3.0 中,我也无法让它为我工作。
0赞 Timmmm 11/15/2023 #2

对于Clang来说,是的!

#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Weverything"
#endif

... your terrible code ...

#if defined(__clang__)
#pragma clang diagnostic pop
#endif

在 Clang 中对 -Weverything 有特殊的处理

不幸的是,GCC 没有类似的功能。我试过了;不起作用。我还阅读了源代码,但看不到任何其他可以工作的东西。-Wall