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期望值的位置.
所以前两行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'选项以从编译器获得最大诊断,它应该告诉你你的函数有一个不返回值的代码路径.