如何自动警告C++开发者误包含标准库内部实现头文件?
如何自动检测并警告标准库内部实现头文件的包含?
问题场景
当开发者编写如下代码时,误包含了GCC/Clang标准库的内部实现头文件:
#include <bits/shared_ptr.h> // some code using std::shared_ptr
需要自动识别这类情况,发出警告并提示改用对应的公开标准头文件(比如<memory>),且要求通过编译器警告或静态分析工具实现。
已尝试的无效方案
- 启用
-Wall -Wextra -pedantic编译选项,无法触发针对内部标准库头文件的警告 - 启用除
llvm*外的所有clang-tidy规则,但llvm*规则仅针对LLVM项目设计,会对几乎所有头文件误报,不适合普通开发场景
可行解决方案
使用clang-tidy的portability-restrict-system-includes检查规则,通过配置限制包含标准库内部目录下的文件。
配置示例
-config="CheckOptions: {portability-restrict-system-includes.Includes: '*,-bits/*,bitset'}"
配置说明
*:允许包含所有系统头文件-bits/*:禁止包含bits/目录下的所有内部实现头文件bitset:特例放行公开标准头<bitset>,避免误报
方案局限性
需要手动维护一份禁止包含的内部头文件/目录列表,无法自动覆盖所有标准库的内部实现路径。
内容的提问来源于stack exchange,提问作者PiotrNycz
相关产品推荐
相关产品推荐

