不满足如果条件但功能仍然返回一些东西

时间:2012-11-10 16:08:02

标签: c++ function if-statement return return-value

以下是代码:

守则:

#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违反条件。那么返回 - 原始值 - 如果条件是不是真的是正常的还是取决于正在使用的编译器?

感谢你。

1 个答案:

答案 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]