Clang 与 Clang tidy 是否检测到相同的警告和错误?

Rig*_*tán 6 c++ linux clang clang-tidy

据我所知,Clan-tidy 可以 在默认检查集(clang-analysisr)之上执行这些检查https://clang.llvm.org/extra/clang-tidy/checks/list.html并且 Clang 也可以检测错误和警告 https://clang.llvm.org/docs/DiagnosticsReference.html 他们可以检测到不同的错误或警告列表吗?
Clang-Tidy 在后台使用 Clang 吗?两者之间有什么联系吗?

JVA*_*pen 5

是的,他们是有区别也是有共同点的。让我从共同点开始:它们都是 LLVM 项目的一部分,众所周知,该项目提供构建在其之上的库和可执行文件。

在这种情况下,clang 编译器使用前端创建 AST 并同时创建编译器警告。它通过优化和代码生成进行了扩展。

Clang-tidy 使用相同的前端,并在其上运行 AST 匹配器来检测问题。

一般来说,编译器警告的检查成本很低,并且(几乎)不包含误报。Clang-tidy 具有昂贵的检查或误报风险较高的检查。后者还包含不太常见的检查或风格检查。

一些检查确实相似,例如缺少覆盖,但是,tidy 会捕获所有情况,其中当文件中未使用覆盖时警告会被抑制。

一般来说,我喜欢启用所有警告并禁用稍后应修复的警告。编译时这将被检查为副作用。Clang-tidy 通常在进程后期运行(预提交或 CI)。