【发布时间】:2016-12-17 12:43:35
【问题描述】:
我有以下代码:
#include <iostream>
using namespace std;
Sum (int a, int b)
{
int x = a - b;
//cout << x << " \n";
return x;
}
int main()
{
int s1 = Sum(3, 6);
cout << s1;
return 0;
}
系统信息: Win 7 Sp1 x64 Ultimate/Professional 或 Win 8.1 x64 代码块 16.01 MinGW 调试器名称和版本:GNU gdb (GDB) 7.6.1 编译器:GNU GCC 编译器
这段代码编译没有问题,但这就是问题所在,应该有错误。
1) 函数 Sum,没有返回值,在 http://cpp.sh/ 上它不允许我编译。
2) 无论我是否写“return x”,变量的 s1 值都是 -3。
它每次都会以某种方式传递x 的值但是如果我取消注释“return x”上方的cout 语句,一切都会按预期进行,到底是什么:) --> s1 将会有没有返回语句时的随机值(因为在用于函数调用之前它没有被初始化),当return 存在时为-3。
我已经在 3 台不同的计算机上进行了尝试,它们都表现出相同的行为。所以我认为机器不是问题。 我也尝试使用不同的编译器,但我不知道我是否正确配置它们并且它们没有调试器,对吗?我试过 Borland c++ 和 Digital Mars。 Borland 有一个新版本 10.1,而不是 codeblocks 支持的 5.5,我无法使新版本工作。 我什至不知道这是编译器问题还是程序问题?
我正在尝试学习 C++,这很烦人。我们的老师在课堂上使用相同的软件,但在 Linux 上运行良好。
题外话:有没有办法在这里插入带有行号的代码?第一次在这里发帖,所以我还是新手:)。
谢谢!
【问题讨论】:
-
使用更严格的编译器选项。
-
您使用的是哪个版本的 GCC?因为就像你说的那样,不应该用任何 C++ 编译器的任何版本编译。
-
问题是什么?为什么不正确的代码行为未定义?
-
^^ 这些人说的。案例与要点:ideone.com/b7dFUe
-
补充一点:在过去,C 有“隐式 int”:没有返回类型的函数声明表明该函数返回
int。这在 C99 中已被删除,但许多编译器继续支持它,因此旧代码不会中断。
标签: c++ gcc mingw codeblocks