不能返回的函数会继续返回值(不是垃圾值)c++ [关闭]

lrl1mhuk  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(114)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我犯了一个错误,当我做了一个递归函数,其目的是获得一个最大的斐波那契值在Integer32在c++。
我犯的错误是

int get_largest_in_fibonacci(int before, int current){
    if(current < 0){
        return before;
    }else{
        get_largest_in_fibonacci(current, before + current);
        // should have been 
        // return get_largest_in_fibonacci(current, before + current);
    }
}

我没有在else语句中返回。
但在这个问题上我不想知道。

int main(){
    cout << "result : " << get_largest_in_fibonacci(1,1) << '\n';
    return 0;
}

在这个main()中,结果是result : 2。但我不明白2从何而来。
因为,那个行为不好的函数不能返回值。
一开始,我以为参数(1,1)可以在某个地方得到2。
所以我改变了它们的值,比如(3,5),但结果是一样的。
然后我想这可能是一个垃圾值。
但我认为垃圾值几乎总是给我随机的“大”数字,但在这里不是这样的。
我把main()稍微修改了一下。

int main(){
    int result = get_largest_in_fibonacci(1,1);
    cout << "result : " << result << '\n';
    return 0;
}

将函数结果赋给int result
但在这一次,结果是result : 0
所以我想知道get_largest_in_fibonacci最初是如何返回的,以及如何通过将其分配给int变量来改变返回值?

mf98qq94

mf98qq941#

你的假设是错误的。一个不返回void类型的函数,如果在执行路径中失败为return,则如果该路径在运行时采用,则会表现出未定义的行为。在这一点上,所有的赌注都关闭了。该程序可能会崩溃,返回2或其他任何东西或删除您的主文件夹。
默认情况下,gcc发出一个警告,应该注意,因为所有警告都应该:
警告:控件到达非void函数的结尾[-Wreturn-type]

相关问题