如何禁用特定包含文件的警告?

我希望对所有包含的文件禁用特定的警告,直接或间接地通过特定的包含文件。 例如,我想禁止“ #include <bar/*>包含的文件包含的所有文件或文件”(你正在为char *分配一个string文本)在这里“)。

原因是,我必须编写的一些人不能使用“const”,所以最后我得到了关于特定string字面滥用的许多警告。 我想忽略来自他们代码的数千条警告,所以我可以专注于我自己的代码中的错误并修复它们。

我使用英特尔C ++和GCC。 我的一些伙伴使用铿锵声,所以我也很乐意听到这个解决scheme。

使用GCC时,可以使用-isystem标志而不是-I标志来禁用该位置的警告。

所以如果你正在使用

 gcc -Iparent/path/of/bar … 

使用

 gcc -isystem parent/path/of/bar … 

代替。 不幸的是,这不是一个特别细致的控制。 我不知道更有针对性的机制。

当我使用g++而且我有第三方头文件,这些头文件用我一般默认的-Wall -Wextra &co生成大量的警告。 我倾向于将它们分开包含,指定system_header #pragma

GCC提供了在系统头文件中find的代码特殊处理。 当GCC正在处理系统标题时,除了#warning生成的警告(请参阅诊断程序)之外的所有警告都被禁止。 在系统头文件中定义的macros在扩展的任何地方都可以避免出现一些警告。 当我们发现由于系统头文件中定义的macros中的代码而导致警告产生大量的误报时,这种免疫力就可以临时授予。

[…]

还有一个指令#pragma GCC system_header ,它告诉GCC将当前包含文件的其余部分作为系统头文件,不pipe它在哪里find。 该文件中#pragma之前的代码不会受到影响。 #pragma GCC system_header在主源文件中没有效果。

我比较喜欢这个解决scheme,因为它更加细化,我可以直接把它放在源代码中,而不用太多的命令行参数和包含目录。

可怕的根库的例子:

 #ifndef ROOTHEADERS_HPP_INCLUDED #define ROOTHEADERS_HPP_INCLUDED #ifdef __GNUC__ // Avoid tons of warnings with root code #pragma GCC system_header #endif #include "TH1F.h" #include "TApplication.h" #include "TGraph.h" #include "TGraph2D.h" #include "TCanvas.h" #endif 

更好的GCC解决scheme:使用#pragma。

 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-W<evil-option>" #include <evil_file> #pragma GCC diagnostic pop 

例如:

 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #include <QtXmlPatterns> #pragma GCC diagnostic pop 

我想最简单的解决scheme是编写一个简单的脚本,根据文件名和警告types调用编译器,编译和去除不需要的输出。 您可以为每个编译器使用不同的脚本。

只要更新你的makefile就可以使用这个脚本,而不是直接调用编译器。