【发布时间】:2012-05-27 03:23:37
【问题描述】:
这个程序
int main()
{
int a, b;
a = b;
return 0;
}
如果你编译它,编译时不会出现警告或错误
g++ -Wall test.cpp
但是,如果你在优化的情况下编译它,即使在相同的警告级别
g++ -Wall -Os test.cpp
然后它会开始抱怨你使用了未初始化的变量!
(注意:实际程序稍长,并没有像这里的这个小例子那样清楚地暴露问题。)
我尝试使用 google 进行搜索,但要么我没有使用正确的搜索词,要么这不是已知现象。无论如何,我的问题基本上是
- 为什么编译器会使用 -Os 而不是使用 -O0 来给出这个警告,即使是在相同的警告级别? (如果有的话,我希望这个小例子的情况正好相反,因为可以完全优化变量,然后问题就会消失。)
- 是否有任何其他编译器选项会触发此类意外警告?因为我有兴趣让我的程序没有错误,所以我希望看到所有这些!
- 这是一个已知功能吗?如果是这样,我在哪里可以找到它?我确实尝试过搜索。
- 或者这只是我特定版本的编译器(gcc 4.3.2-1.1,Linux,32 位)中的一个小故障?
【问题讨论】:
-
我确实在各种最新的 GCC 版本上使用您的第一个编译行收到警告,请参阅下面的答案。
-
您是否在某处设置了将 O 级别默认为 2 或更高的设置?如果手动输入 -O0 会发生什么?否则,也许我的 gcc 版本已经过时了。但这是我的存储库附带的版本......我知道,我已经过期了一个新系统。
-
我明确使用了
-O0。
标签: c++ gcc compiler-construction warnings warning-level