如何使用Clang 3.8禁用单个文件的所有警告?

zne*_*eak 8 clang

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

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

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

我如何要求Clang不为该文件生成任何警告?

Ale*_*sov 12

实际上,"-Weverything"不是一组警告,而是一个传递给编译器的特殊选项.以下是处理这种情况的代码:lib/Basic/Warnings.cpp:118

您仍然可以使用稍微不同的规则/标志来编译有问题的源文件,就像您用于其他来源一样:

clang -Wno-everything foo.c
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 有问题的文件是LLVM的MemorySSA传递.如果有任何问题,很可能我觉得没有资格解决它.我也不确定如果它被丢弃,我自己可以将它保留在树外. (2认同)
  • 换句话说,如果文件在三个月内没有消失,我会遇到比一些警告更糟糕的问题;) (2认同)
  • 如果你想禁用它,例如包括标题,请使用`#pragma clang diagnostic ignored"-Weverything"` (2认同)

Cod*_*key 5

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

$ clang --help | grep -i suppress
  -w                      Suppress all warnings
Run Code Online (Sandbox Code Playgroud)