modernize-deprecated-headers¶
C 库中的一些头文件在 C++ 中已弃用,不再适合 C++ 代码库。有些在 C++ 中没有效果。有关更多详细信息,请参阅 C++14 标准 [depr.c.headers] 部分。
此检查将 C 标准库头文件替换为其 C++ 替代方案,并删除冗余的头文件。
// C++ source file...
#include <assert.h>
#include <stdbool.h>
// becomes
#include <cassert>
// No 'stdbool.h' here.
重要说明:标准不保证 C++ 头文件在全局命名空间中声明所有相同的功能。当前形式的检查可能会破坏使用全局命名空间中的库符号的代码。
<assert.h>
<complex.h>
<ctype.h>
<errno.h>
<fenv.h> // 自 C++11 起已弃用
<float.h>
<inttypes.h>
<limits.h>
<locale.h>
<math.h>
<setjmp.h>
<signal.h>
<stdarg.h>
<stddef.h>
<stdint.h>
<stdio.h>
<stdlib.h>
<string.h>
<tgmath.h> // 自 C++11 起已弃用
<time.h>
<uchar.h> // 自 C++11 起已弃用
<wchar.h>
<wctype.h>
如果指定的标准早于 C++11,则检查只会替换在 C++11 之前弃用的头文件,否则将替换上述列表中的每个头文件。
这些头文件在 C++ 中没有效果
<iso646.h>
<stdalign.h>
<stdbool.h>
检查器忽略 extern “C” { … } 块中的 include 指令,因为库可能希望为 C 和 C++ 库公开一些 API。
// C++ source file...
extern "C" {
#include <assert.h> // Left intact.
#include <stdbool.h> // Left intact.
}
选项¶
- CheckHeaderFile¶
clang-tidy 无法知道当前分析的 C++ 源文件包含的头文件是否未被任何其他 C 源文件包含。因此,为了避免误报和错误的修复建议,我们忽略了向头文件发出报告。如果知道项目中的头文件仅被 C++ 源文件使用,则可以将此选项设置为 true。默认值为 false。