【问题标题】:Not fulfilling If condition but the function still return something不满足 If 条件但函数仍然返回一些东西
【发布时间】:2012-11-10 16:08:02
【问题描述】:

下面是代码:

代码:

#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 。但是当我 cout total 变量时,我仍然得到了我给变量 num 的值。

2.) 我的问题是,这是标准行为吗?因为我可以运行此代码而不会收到任何警告或错误说没有 return 声明声明我没有额外的 return 声明以防 num 违反条件。那么这 returning-the-original-value-if-the-condition-is-not-true 是正常的还是取决于所使用的编译器?

谢谢。

【问题讨论】:

  • 函数必须返回一些东西。当返回类型不是 void 时不返回任何内容是未定义的行为。
  • @chris 你的意思是“当返回类型是int”?
  • @Fraser,我的意思是不是无效,谢谢。
  • 您是否启用了警告?当我用 g++ -Wall 编译时,我得到:main.cpp:22:1: warning: control reaches end of non-void function [-Wreturn-type]
  • 这出乎意料。 gcc/g++ 自古以来就用-Wall 警告过这一点。如果 4.7.0 没有,请提交错误报告。

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


【解决方案1】:

一个承诺返回一个值并且不会引发未定义行为的函数(在 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2013-01-26
    • 2016-09-25
    • 1970-01-01
    • 2018-09-02
    • 2022-11-27
    • 2021-12-23
    相关资源
    最近更新 更多