C ++:当我突然发现编译的代码没有返回语句时,我正在解决一个问题

Sar*_*arg 1 c++ return function visual-studio

Visual Studios甚至Codechef都在编译我的代码,该代码缺少return语句。

我正在解决一些竞争性编程问题,并注意到我的程序在编译时没有在函数中使用return语句。我写了一个简单的函数,没有提到任何return语句,并且程序正在完美地编译。

这是代码

#include <iostream>
using namespace std;

int add(int x, int y)
{
    int c = x + y;
}

int main() {

    int a = add(1, 2);
    cout << a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期待一个我没有得到的错误,让我怀疑我的代码出了什么问题(当然不是上面的代码)。在上面的程序中,我得到的输出0我不明白该怎么办?

Obl*_*ica 6

未返回预期返回值的函数具有未定义的行为

在没有返回语句的情况下从值返回函数(主函数除外)的末尾流出是未定义的行为。

这就是为什么您不应该忽略警告的原因。/Wall 还是/w4您在Visual Studio上需要的标志。

  • 我发现MSVC的`/ Wall`有点多余,我建议`/ W4 / permissive-`建议OP都尝试一下。 (2认同)
  • / Wall选项会发出大量警告(即使对于标准库头也是如此)。他们实际上想要的是/ W4。 (2认同)