llvmlibc-restrict-system-libc-headers

查找在 llvm-libc 实现中未由编译器提供的系统 libc 头文件包含。

#include <stdio.h>            // Not allowed because it is part of system libc.
#include <stddef.h>           // Allowed because it is provided by the compiler.
#include "internal/stdio.h"   // Allowed because it is NOT part of system libc.

此检查是必要的,因为意外包含系统 libc 头文件会导致难以发现的微妙错误。例如,考虑一个系统 libc,其 dirent 结构的字段顺序略微不同于 llvm-libc。虽然这将成功编译,但由于它们在 ABI 上不兼容,因此可能会在运行时导致问题。

选项

Includes

一个包含允许的包含文件名的逗号分隔的 glob 列表的字符串。类似于运行 clang-tidy 本身的 -checks glob 列表,两个通配符是 *-,分别用于包含和排除 glob。默认值为 -*,它不允许所有包含。

这可以用来允许已知的安全包含,例如 Linux 开发头文件。有关更多详细信息,请参见 portability-restrict-system-includes