【问题标题】:Code Blocks incorrect c++ output代码块不正确的 c++ 输出
【发布时间】: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 MarsBorland 有一个新版本 10.1,而不是 codeblocks 支持的 5.5,我无法使新版本工作。 我什至不知道这是编译器问题还是程序问题?

我正在尝试学习 C++,这很烦人。我们的老师在课堂上使用相同的软件,但在 Linux 上运行良好。

题外话:有没有办法在这里插入带有行号的代码?第一次在这里发帖,所以我还是新手:)。

谢谢!

【问题讨论】:

  • 使用更严格的编译器选项。
  • 您使用的是哪个版本的 GCC?因为就像你说的那样,不应该用任何 C++ 编译器的任何版本编译。
  • 问题是什么?为什么不正确的代码行为未定义?
  • ^^ 这些人说的。案例与要点:ideone.com/b7dFUe
  • 补充一点:在过去,C 有“隐式 int”:没有返回类型的函数声明表明该函数返回 int。这在 C99 中已被删除,但许多编译器继续支持它,因此旧代码不会中断。

标签: c++ gcc mingw codeblocks


【解决方案1】:

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

并禁用-fpermissive

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

或者使用代码顶部的编译指示禁用它:

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

您的行为与您描述的完全相同!

【讨论】:

  • 我认为我的机器上没有启用 -fpermissive。我在选项列表中找不到它。 postimg.org/image/qavbl3a6n这里是截图
  • 也许在“其他编译器选项”中?
  • [编辑] 添加了#pragma
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多