【发布时间】:2010-01-27 08:29:55
【问题描述】:
我注意到 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;
}
或者类似的东西,显然更复杂。
【问题讨论】:
-
发布导致警告的代码
-
ok 更新了一个具体的例子。
-
由于 x 是全局的,任何访问 x 的东西都可以在它被赋值之前这样做。要么你把这个例子简化得太多了,要么证明它不会超出优化器的范围和能力所需的分析。警告只是优化的副作用,它有机会警告你这样做。
标签: c++ optimization g++ warnings