以下是代码:
#include <iostream>
using namespace std;
int sum(int ); //To sum up the user input up to 1 , for e.g 4 = 4 + 3 + 2 + 1 = 10
int main(void)
{
int num;
int total;
cin >> num;
total = sum(num);
cout << total;
return 0;
}
int sum(int num)
{
if(num > 0) // How if num is -1 or -10??
return num + sum(num - 1);
}
1。)我尝试执行上述代码并输入违反if -1
或-100
的if条件的值。但是当我cout
total
变量时,我仍然得到了我给变量num
赋予的值。
2.)我的问题是,这是一种标准行为吗?因为我可以运行此代码而不会收到任何警告或错误,说没有声明return
语句我没有额外的return
语句,以防num违反条件。那么返回 - 原始值 - 如果条件是不是真的是正常的还是取决于正在使用的编译器?
感谢你。
答案 0 :(得分:3)
一个承诺返回一个值并且不会导致未定义行为的函数(在C中,只有在使用该值的情况下)。
这里你的函数有两个执行路径:
int sum(int num) {
if (sum > 0)
return num + sum(num - 1); // code path 1
// code path 2
}
在第二个代码路径中,它不会返回任何内容。
未定义的行为意味着任何事情都可能发生。流行的形象是守护进程可能会从你的鼻子里飞出来。实际上,根据实现情况,您更有可能获得或多或少的随机值。看起来在你的情况下,对于你的编译器,这个程序和那组优化(也许因为星星对齐)你得到num
。幸运的你。
顺便说一句,my compiler gives a warning:
source.cpp: In function 'int sum(int)':
source.cpp:22:1: warning: control reaches end of non-void function [-Wreturn-type]