如何修复 Clang Tidy 中的 llvmlibc-restrict-system-libc-headers 检查?

Wou*_*eek 6 c++ libc llvm clang clang-tidy

我不明白llvmlibc-restrict-system-libc-headersClang Tidy 中的检查(链接)。

我在 C++ 代码中包含 C 库,如下所示:

#include <cstddef>
Run Code Online (Sandbox Code Playgroud)

我应该更改什么来修复此 Clang Tidy 检查?它应该被修复吗?

Som*_*me1 6

该检查强制程序员使用编译器提供的 (libc) 标头。

它主要由开发 llvm 的 libc 的团队使用,以避免使用系统提供的标头。

来自 clang-tidy 项目的 Phabricator Web 界面:

这添加了一个新模块来执行特定于 llvm-libc 项目的标准。此更改还添加了第一个检查,该检查限制用户意外包含系统 libc 标头,这可能会导致难以检测的微妙错误。

并进一步

[...]我认为检查器名称应该通用,因为它不需要与 llvm-libc 结合在一起。其他项目可能有类似的需求。例如,他们不想意外包含系统 zlib.h -> 他们可能会发布捆绑的 zlib(例如,在third_party/zlib/ 中)。

感谢您的建议,一般检查听起来是个好主意。我可以看到它的用例,因为任何人都可以使用它。我花时间移植了 fuchsia 的检查并充实了面向用户的文档。

您可以通过在项目的包含目录中显式提供感兴趣的标头(此处为 libc 标头)并相应地调整链接路径来修复它。

要禁用它,您可以在 clang-tidy 的参数中指定不需要的检查。

CMake 示例:

set(CMAKE_C_CLANG_TIDY
        clang-tidy;
            -header-filter=.*;
            -checks=*,-llvmlibc-restrict-system-libc-headers;
            -warnings-as-errors=*;)
Run Code Online (Sandbox Code Playgroud)