我注意到g编译器的这个有趣的行为,如果我向编译器添加-O3标志,我得到
otsu.cpp:220: warning: ‘x’ may be used uninitialized in this function
但是,当我不使用优化而是使用调试标志-g时,我根本没有任何警告.现在,当-g标志打开时,我更信任编译器;但是,我想知道这是否是应该预期的明确定义的行为?
为清楚起见,导致这种情况的代码是这样的:
int x; //uninitialized getAValueForX( &x ); // function makes use of x,// but x is unitialized
哪里
void getAValueForX( int *x ) { *x = 4; }
或者沿着这些方向的东西,显然更复杂.
解决方法
这是预期的.优化会导致特定的代码分析运行,这就是gcc如何找到未初始化的变量.它在手册页中:
. . . these warnings depend on optimization