C++传递未初始化struct作为函数参数无告警,需什么编译flag触发?
可触发对应未初始化变量告警的编译参数
核心原因说明
-Wall本身已经包含-Wuninitialized检测规则,但这类检测依赖编译器的数据流分析能力,默认无优化等级(-O0)下编译器不会做深度分支路径分析,因此无法识别你代码中走不到的if(0)分支导致的结构体未初始化问题,必须配合优化等级开启才能触发告警。
GCC编译器配置
在Makefile的CXXFLAGS中添加如下参数:
# 至少开启-O1优化,搭配-Wuninitialized、-Wmaybe-uninitialized CXXFLAGS += -O1 -Wall -Wuninitialized -Wmaybe-uninitialized # 可选:将未初始化变量告警转为编译错误,强制拦截问题 # CXXFLAGS += -Werror=uninitialized -Werror=maybe-uninitialized
添加后编译你的示例代码,会直接输出warning: ‘p’ is used uninitialized [-Wuninitialized]的告警信息。
Clang编译器配置
在Makefile的CXXFLAGS中添加如下参数:
CXXFLAGS += -O1 -Wall -Wuninitialized -Wconditional-uninitialized # 可选:转告警为错误 # CXXFLAGS += -Werror=uninitialized -Werror=conditional-uninitialized
内容的提问来源于stack exchange,提问作者Tuval4980
相关产品推荐
相关产品推荐

