【发布时间】:2020-12-25 19:31:20
【问题描述】:
我不明白 Clang Tidy (link) 中的 llvmlibc-restrict-system-libc-headers 检查。
我在 C++ 代码中包含 C 库,如下所示:
#include <cstddef>
我应该改变什么来修复这个 Clang Tidy 检查?是否应该修复它?
【问题讨论】:
标签: c++ clang llvm libc clang-tidy
我不明白 Clang Tidy (link) 中的 llvmlibc-restrict-system-libc-headers 检查。
我在 C++ 代码中包含 C 库,如下所示:
#include <cstddef>
我应该改变什么来修复这个 Clang Tidy 检查?是否应该修复它?
【问题讨论】:
标签: c++ clang llvm libc clang-tidy
检查强制程序员使用编译器提供的 (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=*;)
【讨论】: