You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让clang-tidy对间接引入的标准库构造的使用发出警告?

如何让clang-tidy对间接引入的标准库构造的使用发出警告?

你遇到的这种依赖标准库头文件间接引入的情况,确实容易踩坑——换个库版本或者编译器就直接编译失败,太闹心了。想让clang-tidy帮你提前揪出这类问题,有几个实用的办法:

  • 启用misc-include-cleaner检查器:这个检查器就是专门干这个的——它会扫描你的代码,找出所有你使用了但没有直接包含对应头文件的实体,不管是标准库类型还是自定义类型。运行clang-tidy的时候,你只需要加上检查器参数:-checks='misc-include-cleaner',它就会标记出像std::logic_error这种你用了但没直接包含<stdexcept>的情况,提醒你补上必要的头文件,而不是依赖其他头文件的间接引入。

    要注意的是,这个检查器需要clang进行完整的语义分析,所以编译的时候得确保是正常的语义分析模式,不能只做语法检查,否则它可能没法准确识别所有未直接包含的实体。

  • 配合编译器严格模式辅助:虽然你要的是clang-tidy的警告,但可以把编译器的-Wall -Wextra选项加上,和clang-tidy的检查形成双重保险。有些情况下,编译器会对依赖间接引入的实体给出弱提示,clang-tidy则能更明确地把这类风险标记出来。

拿你给出的代码举例:

#include <array>
int main() {
    throw std::logic_error("hi");
}

启用misc-include-cleaner后,clang-tidy就会明确提示你:std::logic_error的定义来自<stdexcept>,但你没有直接包含该头文件,依赖间接引入存在兼容性风险。

备注:内容来源于stack exchange,提问作者einpoklum

火山引擎 最新活动