这个节目
int main()
{
int a, b;
a = b;
return 0;
}
如果你编译它,编译时不会出现警告或错误
g++ -Wall test.cpp
但是,如果您在优化的情况下编译它,即使在相同的警告级别
g++ -Wall -Os test.cpp
然后它会开始抱怨你正在使用未初始化的变量!
(注意:实际程序稍长,并没有像这里的这个小例子那样清楚地暴露问题。)
我试过用谷歌搜索,但要么我没有使用正确的搜索词,要么这不是一个已知的现象。无论如何,我的问题基本上是
- 为什么编译器会用 -Os 而不是用 -O0 给出这个警告,即使是在相同的警告级别?(如果有的话,对于这个小例子,我希望它是相反的,因为可以完全优化变量,然后问题就会消失。)
- 是否有任何其他编译器选项会触发这样的意外警告?因为我有兴趣让我的程序没有错误,所以我喜欢看到所有的程序!
- 这是一个已知的功能吗?如果是这样,我在哪里可以找到它?我确实尝试过搜索。
- 或者这只是我特定版本的编译器(gcc 4.3.2-1.1,Linux,32 位)中的一个小故障?