我有这段代码:
#include <iostream>
using namespace std;
void funcA()
{
int a = 4;
}
void funcB()
{
int b;
cout << b;
}
int main()
{
funcA();
funcB();
cout << endl;
return 0;
}
如果我在没有优化的情况下编译它:g++ -o run file.cpp
我收到的结果是:4
如果我用以下代码编译它:g++ -O3 -o run file.cpp
我收到的结果是:0
现在,我希望在两种情况下
1)从funcA返回任何内容,因为我们只是调用它而在funcA中我们只是为变量赋值(不要返回任何内容)。
2)从编译器返回关于funcB的警告,因为我们没有初始化b值。
我发现this answer更好(更详细)。
答案 0 :(得分:3)
要获得有用的警告,您必须要求它们。使用-Wall -Wextra
选项运行gcc并感到惊讶。
答案 1 :(得分:1)
在C ++中,如果您没有初始化值,编译器(没有警告标志)将不会发出警告。
如果你初始化一个变量你实际做的是分配x个字节的数据(在这种情况下很可能是4个)。所以,即使你没有初始化它,也有“某事”。
在这种情况下,它可能会重用a
先前占用的内存块,这就是输出中看到4的原因。
如果你用-03标志运行g ++(最大的优化),所有的值都被初始化为0.这就是你在输出上看到0的原因。