【问题标题】:How to fix llvmlibc-restrict-system-libc-headers check in Clang Tidy?如何修复 Clang Tidy 中的 llvmlibc-restrict-system-libc-headers 检查?
【发布时间】: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


    【解决方案1】:

    检查强制程序员使用编译器提供的 (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=*;)
    

    【讨论】:

    • 我知道如何在 Clang Tidy 中禁用任意检查。我想知道我的问题所涉及的具体检查是什么意思,我什么时候可以使用它/在什么情况下修复它是有意义的。
    • 抱歉误解了你的问题,我更新了我的答案。
    猜你喜欢
    • 2018-12-21
    • 2016-05-17
    • 2020-07-26
    • 2016-02-18
    • 2020-06-28
    • 1970-01-01
    • 2020-04-08
    • 2018-09-10
    • 2017-01-05
    相关资源
    最近更新 更多