c++ 忽略由第三方头文件引起的[clang-diagnostic-error] clang-tidy

jgovgodb  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(332)

我在开发中使用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>


看起来这些“clang-diagnostic-errors”不会停止编译,因为它会继续编译并正常运行。是否有一个标志来关闭/抑制这个错误?我不想看到它,因为我没有写这些头文件。
如果我去掉参数-I/path/to/include,一切都编译得很好,没有错误。

5lwkijsr

5lwkijsr1#

没有办法忽略 *clang-diagnostic-error**,因为它基本上是一个编译器错误。
要让clang-tidy工作,clang后端需要能够编译分析的代码,以生成AST(抽象语法树)。
问题是你包含了一些不能被clang编译的头文件(我猜是MSVC的windows头文件)。

sh7euo9m

sh7euo9m2#

我不确定这是否会破坏以后的东西,所以只是在你自己的风险。我设法“解决”这个问题(因为它只是一个问题列表中有一个错误)在VSCode:

"C_Cpp.codeAnalysis.clangTidy.args": [
  "--extra-arg=-ferror-limit=1"
]

字符串
这使得clang-tidy告诉编译器只抛出一个错误并给予,所以clang-tidy将解析剩下的任何错误。
我知道这是针对VSCode的,但是这个参数可以在其他IDE中使用。

1wnzp6jl

1wnzp6jl3#

尝试防止无限循环。我曾经遇到过这个问题,当我在SDL 2中运行一个窗口时,当我简单地将第二个条件与“|“,它工作了。我认为问题出在VS代码编译器上,它认为,循环是无限的。

相关问题