If-else语句中的返回值 - C++

use*_*792 2 c++ if-statement return-value

以下代码打印:

5
Run Code Online (Sandbox Code Playgroud)

为什么打印5?如果它返回5为什么它不打印"詹姆斯"?我不明白下面的代码.如果我删除了else字,则打印-1.但是它不应该返回默认值吗?

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int fonk()
{
    int a = 5, b = 3;
    int c = a*b;
    if(c >10)
    {
        if( a<b && a >0)
        {   cout <<"James";
        return a;
        }

        else if(b<0)
        {
            return b;
        }

    }
    else return -1;

}

int main()
{
    int x = fonk();
    cout << x;
}
Run Code Online (Sandbox Code Playgroud)

BoB*_*ish 17

你正在达到未定义的行为.你的功能实际上return什么都没有!看看每个条件:

  • c>10?是.
  • a<b && a >0?没有.
  • b<0?没有.

所以你从未打过任何一个return.这意味着你的程序中绝对会发生任何事情.在您的情况下,似乎恰好5存在于程序return期望值的位置.


kfs*_*one 5

所以前两行fonk delcare有以下几点:

int a = 5, b = 3, c = a *b;
Run Code Online (Sandbox Code Playgroud)

所以a是5,b为3和c15.

if(c >10)
Run Code Online (Sandbox Code Playgroud)

15大于10.

    if( a<b && a >0)
Run Code Online (Sandbox Code Playgroud)

这不是真的,所以James/return分支没有被执行.

    else if(b<0)
Run Code Online (Sandbox Code Playgroud)

b是3,> = 0,因此不执行return b语句.

else
Run Code Online (Sandbox Code Playgroud)

这个语句引用"c> 10",c> 10是真的,所以这个else子句没有被执行.

}
Run Code Online (Sandbox Code Playgroud)

你的函数在没有返回任何内容的情况下结束,这将调用"Undefined Behavior".

解决方案:从中删除'else' else return -1;或添加一个return -2;以查看代码不遵循任何路径的情况.

我看到你正在使用GCC - 添加'-Wall'选项以从编译器获得最大诊断,它应该告诉你你的函数有一个不返回值的代码路径.