这个节目
int main()
{
int a, b;
a = b;
return 0;
}
如果您使用
编译,则编译不会出现警告或错误g++ -Wall test.cpp
但是,如果您在优化的情况下编译它,即使处于相同的警告级别
g++ -Wall -Os test.cpp
然后它会开始抱怨你正在使用未初始化的变量!
(注意:实际的程序稍微长一些,并且没有像这里的这个小例子那样清楚地暴露问题。)
我尝试使用谷歌进行搜索,但要么我没有使用正确的搜索词,要么这不是一个已知的现象。无论如何,我的问题基本上是
编译器需要进行额外的检查才能执行一些优化,这会导致它发出额外的警告。 GCC简介的相关章节里有简单的解释。
顺便说一句,在我的平台(x86 上的 32 位 ubuntu 12.04)上,代码会使用 gcc 4.6.3、gcc 4.7.0 和 gcc 4.8 快照生成警告:
uninitialized.cpp:在函数“int main()”中: uninitialized.cpp:3:9:警告:变量“a”已设置但未使用 [-Wunused-but-set-variable] uninitialized.cpp:4:10:警告:在此函数中使用未初始化的“b”[-Wuninitialized]
使用更高的优化级别编译器注意到您正在等同未初始化的变量。等等警告。