2016-12-17 95 views
0

我有以下代码:代码块不正确的C++输出

#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; 
} 

系统信息: 赢7 SP1 64位旗舰版/专业版或Windows 8.1 x64的 代码块16.01 MinGW的 调试器名和版本:GNU GDB (GDB)7.6.1 编译器:GNU GCC编译器

此代码编译没有问题,但这是问题,应该有错误。

1)功能总和,没有返回值,在http://cpp.sh/它不让我编译,因为这一点。

2)无论我是否写入“return x”,变量的s1值为-3。

它在某种程度上通过x每次的价值,但如果我取消了cout声明上面的“return x”一切都开始工作了预期,什么是地狱:) - >s1会有一个随机值时,没有return语句(因为它在用于函数调用之前未被初始化),而当return在那里时是-3。

我已经在3台独立的电脑上试过了,它们都表现出相同的行为。所以我不认为机器是问题。 我也试过使用不同的编译器,但我不知道我是否正确配置它们,并且它们没有调试器?我试过Borland C++ and Digital MarsBorland有一个新的版本10.1,而不是代码块支持的5.5,我不能让新的工作。 我甚至不知道这是编译器还是程序问题?

我想学习C++,这是非常烦人的。我们的老师在课堂上使用相同的软件,但是在Linux上,它完美地工作。

Off topic:有没有办法在这里插入带有行号的代码?首先在这里发布,所以我仍然是新的:)。

谢谢!

+1

使用更严格的编译器选项。 – juanchopanza

+0

您使用的是哪个版本的GCC?因为就像你说的那样,不应该用任何C++编译器的版本进行编译。 –

+0

什么是问题?为什么不正确的代码行为不确定? – Fureeish

回答

1

转至 “项目” - > “编译选项” - > “编译器设置” 选项卡 - > “编译器标志”

和禁用-fpermissive

-fpermissive降级了一些关于从不符合标准的代码诊断错误警告。因此,使用-fpermissive将允许编译一些不合格的代码。

或使用你的代码的顶部编译禁用它:

#pragma GCC diagnostic ignored "-fpermissive" 

你也可以尝试在“编译器标志”标签

BTW添加标志“-pedantic”:

如果您尝试online

#pragma GCC diagnostic error "-fpermissive" 

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; 
} 

你有完全相同的行为,你描述!

+0

我不认为我的机器上启用了-fpermissive。我无法在选项列表中找到它。 https://postimg.org/image/qavbl3a6n/这里是截图 –

+0

也许在“其他编译器选项”? – Rama

+0

[编辑]添加了#pragma – Rama

0

正如Rama说的,您可能已经在您的代码块中启用了-perfiveive。 转至“项目” - >“编译选项” - >“编译器设置”选项卡 - >“其他选项”并删除-fpermissive。