忽略由第三方标题引起的[clang-diagnostic-error] clang-tidy

时间:2018-05-15 17:16:32

标签: c++ header-files linter clang-tidy

我正在使用clang-tidy作为" linter"开发中的工具。我开始将第三方软件集成到我的代码中,当我使用:

包含头文件时
-I/path/to/include 
生成了大量的错误,我还没有#include标题。

error: too many errors emitted, stopping now [clang-diagnostic-error]
...
/path/to/include/wchar.h:81:1: error: unknown type name 'wint_t' [clang-diagnostic-error]
wint_t fgetwc(FILE *__stream);
^
/path/to/include/wchar.h:81:15: error: unknown type name 'FILE' [clang-diagnostic-error]
wint_t fgetwc(FILE *__stream);
              ^
...

我使用:

编译我的程序
/usr/bin/clang-tidy-4.0 /path/to/main.cpp -checks=-*,cppcoreguidelines* -- -lang-c++ -I/path/to/include -std=gnu++11 -Wall -Werror -O0 -g -D<define variables>

似乎这些&#34; clang-diagnostic-errors&#34;不要停止编译,因为它继续编译并运行正常。是否有一个标志可以关闭/抑制它?我不想看到它,因为我没有写这些头文件。

如果我摆脱了论证-I/path/to/include,一切都很好,没有错误。

2 个答案:

答案 0 :(得分:2)

要使 clang-tidy 工作,所分析的代码需要由 clang 后端编译以生成 AST。显然情况并非如此,因为 clang-diagnostic-error 基本上是一个编译错误。

问题是您包含了无法由 clang 编译的头文件(我猜是用于 MSVC 的 Windows 头文件),无法忽略这一点。

答案 1 :(得分:0)

clang-diagnostic-error基本上是编译器错误。

要禁止来自第三方标头的编译器诊断消息,只需使用-isystem而不是-I来包含那些标头。