代码阻止错误的c ++输出

时间:2016-12-17 12:43:35

标签: c++ gcc mingw codeblocks

我有以下代码:

#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)变量的s1值是-3,无论我写&#34;返回x&#34;或不。

如果我取消注释&#34; x&#34;之上的cout语句,它会以某种方式每次都传递return x的值。一切都开始如预期的那样,什么地狱:) - &gt;如果没有返回语句(因为它在用于函数调用之前未初始化),s1将具有随机值,而当return存在时,<div class="row"> <div class="col-sm-6"> <div class="input-group"> <textarea v-model="notes" maxlength="1000" class="form-control" row="2" :disabled="laptop.scrapped !== 0"> </textarea> <div class="clear"></div> <button class="btn btn-default input-group-addon" :disabled="!notes">Save</button> </div> </div> <div class="col-sm-2"> </div> <div class="col-sm-4 text-right button"> <button class="btn btn-primary">Return</button> <button class="btn">Select and Return</button> </div> 将具有随机值。

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

我试图学习C ++,这非常烦人。我们的老师在课堂上使用相同的软件,但在 Linux 上,它完美无缺。

偏离主题:有没有办法在这里插入包含行号的代码?首先发布在这里,所以我仍然是新的:)。

谢谢!

2 个答案:

答案 0 :(得分:1)

转到“项目” - &gt; “构建选项” - &gt; “编译器设置”选项卡 - &gt; “编译器标志”

并停用-fpermissive

  

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

或者在代码顶部使用pragma禁用它:

#pragma GCC diagnostic ignored "-fpermissive"

您也可以尝试在“编译器标志”选项卡中添加标记“-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;
}

你所描述的行为完全相同!

答案 1 :(得分:0)

正如Rama所说,你可能在你的代码块中启用了-fpermissive。 转到&#34; Project&#34; - &GT; &#34;构建选项&#34; - &GT; &#34;编译器设置&#34;标签 - &gt; &#34;其他选项&#34; 和删除-fpermissive。