如何解决如何禁用特定包含文件的警告?
| 我希望禁用对特定包含文件直接或间接包含的所有文件的特定警告。例如,对于所有文件或“ 0”包含的文件包含的文件,我要禁用警告“您正在为char * \分配字符串文字”(在我的情况下,星号表示“此处可能存在任何字符\” ”)。 原因是,我不得不与之进行编程的某些人无法使用\“ const \”,因此最后,我收到有关该特定字符串文字滥用的许多警告。我想忽略来自其代码的成千上万的警告,因此我可以专注于自己的代码中的错误并加以解决。 我使用Intel C ++和GCC。我的一些伙伴使用clang,所以我也很高兴听到解决方案。解决方法
使用GCC时,可以使用
-isystem
标志而不是-I
标志禁用该位置的警告。
因此,如果您当前正在使用
gcc -Iparent/path/of/bar …
采用
gcc -isystem parent/path/of/bar …
代替。不幸的是,这并不是一个特别精细的控件。我不知道有针对性的机制。
, 更好的GCC解决方案:使用#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
, 当我使用g++
时,我有第三方标头生成大量警告,而我的默认默认值为-Wall -Wextra
&co。我倾向于将它们分为单独的包含,并指定system_header
#pragma
。
GCC对在系统头文件中找到的代码给予特殊对待。在GCC处理系统标题时,所有警告(由ѭ11generated生成的警告除外)(请参阅诊断)均被抑制。系统标头中定义的宏无论扩展到何处都不会受到一些警告。当我们发现警告由于系统头文件中定义的宏中的代码而产生大量误报时,将临时授予此豁免权。
[...]
还有一个指令“ѭ12”,该指令告诉GCC不管在哪里找到,都将当前包含文件的其余部分视为系统头。文件中的“ 10”之前的代码将不受影响。 “ 12”在主源文件中无效。
我更喜欢这种解决方案,而不是“ 1”解决方案,因为它的粒度更细,我可以将其直接放在源代码中,而不会与命令行参数和包含目录混淆太多。
丑陋的根库示例:
#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
, 我猜最简单的解决方案是编写一个简单的脚本,该脚本将根据文件名和警告类型调用编译器,进行编译并删除不需要的输出。您可以为每个编译器使用不同的脚本。
只需更新您的makefile即可使用此脚本,而不是直接调用编译器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。