【问题标题】:Is there an gcc/Xcode pragma to suppress warnings?是否有 gcc/Xcode 编译指示来抑制警告?
【发布时间】:2010-12-03 15:36:52
【问题描述】:

是否有 #pragma 让 gcc/Xcode 抑制特定警告,类似于 Java 的 @SuppressWarning 注释?

我通常使用-Wall 进行编译,但在某些情况下我想忽略特定警告(例如,在编写一些快速/脏代码只是为了帮助调试某些东西时)。

我不是在寻找“修复代码”的答案。

【问题讨论】:

    标签: xcode gcc pragma gcc-warning


    【解决方案1】:

    Here's a viable solution。使用#pragma GCC system_header 让GCC 以一种非常特殊的方式处理您的代码,从而抑制任何非致命的#warning

    请记住,您只是在欺骗您的预处理器,而不是真正的编译器。大多数情况下,抑制警告可能是有害的。

    【讨论】:

    • 在理想世界中,我们甚至应该将所有警告都视为错误(使用 -Werror)。只要有可能,我都会这样做。处理多个平台时变得很困难,但除此之外,警告 = 错误。
    • 是的,我也是 -Werror。我的问题更多的是临时代码来帮助调试。
    • 太糟糕了,你不能在一个块中做到这一点。为其余文件做这件事对我来说太危险了。
    【解决方案2】:

    在 gcc4.6 及更高版本中,您可以使用编译指示来抑制特定的警告,并且只对特定的代码块进行抑制,即:

    #pragma GCC diagnostic 
    push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 
    // Code that causes warning goes here
    #pragma GCC diagnostic pop
    

    push/pop 用于保留处理代码之前的诊断选项。

    这比使用“#pragma GCC system_header”抑制所有警告要好得多。 (当然,在较旧的 gcc 中,您可能会“卡住”#pragma GCC system_header 方法!)

    这是关于抑制 gcc 警告的一个很好的参考: http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html

    本页还介绍了如何使用-fdiagnostics-show-option 找出控制特定警告的选项。

    当然,正如其他人所提到的,解决所有警告的根本原因通常比压制它们要好得多!但是,有时这是不可能的。

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      相关资源
      最近更新 更多