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

如何使用Clang 3.8禁用单个文件的所有警告?,clang,Clang,我正在使用Clang3.8编译一个来自项目中不同来源的文件。这是一个临时的支柱,因为这个文件是我也使用的库的一个补充,它的代码将是该库下一个版本的一部分。然而,这些人的发展没有我严格的警告标志 我对这些警告不感兴趣,因为它们是良性的,我不维护该文件,它将在几个月内消失。当然,我可以有选择地删除一两个警告,但我认为在这种情况下,禁用它生成的所有警告更有意义,因为我可以稍后更改项目的警告设置,并且可能会出现更多的警告 我尝试了#pragma-clangdiagnostic-ignored“-Weve

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

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

我尝试了
#pragma-clangdiagnostic-ignored“-Weverything”
,但clang警告说
-Weverything
是一个未知的警告组

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

事实上,“-Weverything”不是一组警告,只是传递给编译器的一个特殊选项。下面是处理此情况的代码:

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

clang -Wno-everything foo.c
但是,我建议使用
#pragma
明确禁用每个警告

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


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

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

$clang--help | grep-i抑制
-w禁止所有警告

所涉及的文件是LLVM的MemorySSA pass。如果有任何问题,我可能觉得自己没有资格解决它。我也不确定,如果文件被删除,我自己是否能够将其从树上维护下来。换句话说,如果文件在三个月内没有消失,我将遇到比几个警告更糟糕的问题;)如果您想禁用它,例如,包含的标题使用
#pragma-clang-diagnostic-ignored“-Weverything”
@ErikAigner,这是最近开始工作的吗?我在我的问题中说了出来,因为它在2016年初不起作用。现在似乎起作用了。