仅针对部分翻译单元有选择地禁用 GCC 警告

新手上路,请多包涵

与此 MSVC 预处理器代码最接近的 GCC 是什么?

 #pragma warning( push )                    // Save the current warning state.
#pragma warning( disable : 4723 )          // C4723: potential divide by 0
// Code which would generate warning 4723.
#pragma warning( pop )                     // Restore warnings to previous state.

我们在通常包含的标头中有代码,我们不想为其生成特定的警告。但是,我们希望包含这些标头的文件继续生成该警告(如果项目启用了该警告)。

原文由 Jon-Eric 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

自 4.6 版或 2010 年 6 月左右在主干中,这 在 GCC 中是可能 的。

这是一个例子:

 #pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wuninitialized"
    foo(a);         /* error is given for this one */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
    foo(b);         /* no diagnostic for this one */
#pragma GCC diagnostic pop
    foo(c);         /* error is given for this one */
#pragma GCC diagnostic pop
    foo(d);         /* depends on command line options */

原文由 Matt Joiner 发布,翻译遵循 CC BY-SA 4.0 许可协议

我做过类似的事情。对于第三方代码,我根本不想看到任何警告。因此,我没有指定 -I/path/to/libfoo/include ,而是使用了 -isystem /path/to/libfoo/include 。这使得编译器出于警告的目的将这些头文件视为“系统头文件”,只要您不启用 -Wsystem-headers ,您基本上是安全的。我仍然看到一些警告从那里泄漏,但它减少了大部分垃圾。

请注意,这 在您可以通过包含目录隔离有问题的代码时才对您有所帮助。如果它只是您自己项目的一个子集,或者与其他代码混合在一起,那么您就不走运了。

原文由 Tom 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题