【发布时间】:2017-03-13 22:31:02
【问题描述】:
我有这个代码:
#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 更好(更详细)。
【问题讨论】:
-
这是未定义的行为。你得到的就是你得到的,因为未定义的原因
-
好吧,未定义的行为是未定义的,因此争论它是毫无用处的。如果需要警告,请启用警告。
-
现在,我希望在这两种情况下...... -- 不,未定义的行为在你“期望”事情发生的地方不起作用。
-
感谢您的回答。我现在可以看到问题所在了。(尽管投了反对票,但我无法理解,因为搜索这样的问题很困难(未定义、未指定和实现定义的行为)将此与我的标题进行比较。