如何配置Clang-Tidy,豁免NULL以外的特定死存储值?
解决Clang-Tidy对
INVALID_HANDLE_VALUE防御性赋值的死存储误报问题 Clang-Tidy的deadcode.DeadStores检查默认会忽略赋值为NULL的防御性操作,但不会自动识别INVALID_HANDLE_VALUE这类Windows API特有的无效值标记。要让它豁免这类赋值,你可以通过以下两种方式配置:
方式一:使用.clang-tidy配置文件
在项目根目录创建或修改.clang-tidy文件,给deadcode.DeadStores检查添加IgnoreAssignmentsTo参数,指定要忽略的目标值:
Checks: 'deadcode.DeadStores' CheckOptions: - key: deadcode.DeadStores.IgnoreAssignmentsTo value: 'INVALID_HANDLE_VALUE'
如果需要同时豁免多个类似的API无效标记(比如INVALID_SOCKET),可以用逗号分隔:
CheckOptions: - key: deadcode.DeadStores.IgnoreAssignmentsTo value: 'INVALID_HANDLE_VALUE, INVALID_SOCKET'
方式二:编译时通过命令行参数传递
如果不想修改配置文件,也可以在编译时直接通过-Xclang-tidy参数指定配置:
clang-tidy your_source.cpp -Xclang-tidy="-checks=deadcode.DeadStores,-deadcode.DeadStores.IgnoreAssignmentsTo=INVALID_HANDLE_VALUE"
若使用CMake构建系统,可将该参数添加到目标编译选项中:
target_compile_options(your_target PRIVATE -Xclang-tidy="-checks=deadcode.DeadStores,-deadcode.DeadStores.IgnoreAssignmentsTo=INVALID_HANDLE_VALUE" )
注意事项
- 直接填写宏名称即可,Clang-Tidy会匹配代码中对该宏的赋值操作,无需展开宏的实际值(比如
(HANDLE)-1)。 - 若你自定义了类似的无效状态标记宏,也可以用同样的方式将其加入豁免列表。
内容的提问来源于stack exchange,提问作者Govind Parmar
相关产品推荐
相关产品推荐

