【问题标题】:How can I disable all warnings for a single file with Clang 3.8?如何使用 Clang 3.8 禁用单个文件的所有警告?
【发布时间】:2016-05-24 18:43:03
【问题描述】:

我正在使用 Clang 3.8 来编译来自项目中不同来源的 一个 文件。这是一个临时的拐杖,因为这个文件是我也使用的库的补充,它的代码将成为该库下一个版本的一部分。然而,这些人的发展没有我那么严格的警告标志。

我对这些警告不感兴趣,因为它们是良性的,我不维护该文件,它会在几个月内消失。当然,我可以有选择地删除一两个警告,但我认为在这种情况下禁用它生成的所有警告更有意义,因为我可以稍后更改项目的警告设置,并且可能会出现更多事件它。

我试过#pragma clang diagnostic ignored "-Weverything",但Clang 警告-Weverything 是一个未知的警告组。

如何让 Clang 不为该文件生成任何警告?

【问题讨论】:

    标签: clang


    【解决方案1】:

    确实,“-Weverything”不是一组警告,而只是传递给编译器的一个特殊选项。这是处理这种情况的代码:lib/Basic/Warnings.cpp:118

    您仍然可以使用与其他源代码略有不同的规则/标志来编译有问题的源文件:

    clang -Wno-everything foo.c
    

    但是,我建议使用#pragma 明确禁用每个警告。

    如果您禁用所有警告,然后升级编译器,那么您可能会错过一些可能很重要的新警告(例如未定义的行为检查、安全检查等)。

    另外,想象一下如果文件在三个月后没有消失,而是永远留在项目中会发生什么。

    【讨论】:

    • 有问题的文件是 LLVM 的 MemorySSA 通行证。如果它有任何问题,我很可能没有资格修复它。如果它被丢弃,我也不确定我是否可以自己维护它。
    • 换句话说,如果文件在三个月内没有消失,我会遇到比几个警告更糟糕的问题;)
    • 如果你想禁用它,例如包含的标题使用#pragma clang diagnostic ignored "-Weverything"
    • @ErikAigner,这是最近开始工作的东西吗?我在我的问题中提到了它,因为它在 2016 年初不起作用。
    • 在 Makefile 中使用“clang -Wno-everything foo.c”会出现错误“***缺少分隔符。停止。”
    【解决方案2】:

    如果您需要编译器标志在 GCC 和 Clang 之间保持一致,它们都有 -w 标志:

    $ clang --help | grep -i suppress
      -w                      Suppress all warnings
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2015-04-24
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多