|
发表于 2023-4-25 13:33:40
|
显示全部楼层
本楼为最佳答案
首先,我想澄清一下,你提到的两个代码片段中的第二个版本(没有return语句的版本)实际上是不正确的,它可能在某些编译器下偶然得到了正确的结果,但这不是一个可靠的行为。
问题1:去掉之后的运行逻辑和程序运行的每一步的动作是否一样呢?
答:不一样。去掉return后,你的peach函数不再返回任何值。在C语言中,不显式返回值的函数的行为是未定义的。这意味着编译器可能会产生不可预测的结果,这是因为没有显式地告诉它在函数返回时如何处理返回值。因此,去掉return后,程序运行的逻辑和每一步的动作是不一样的。
问题2:为什么有return的那个代码 第一次运行peach函数就会到return peach(day + 1, (num + 1) * 2); 这里不会返回这个函数的值到main函数里吗?
答:有return的代码在执行到return peach(day + 1, (num + 1) * 2)时,会递归地调用peach函数,一直到达基本情况(day == 10)。然后它开始返回值到上一层的调用,直到最后返回到main函数里。因此,有return的代码确实会将函数的值返回到main函数里。
在你的第二个代码片段中,由于没有显式返回值,编译器可能会偶然地使用寄存器中的值(这个值可能是由于之前的计算而存在的),从而导致在某些情况下得到正确的结果。然而,这并不是一个可靠的行为,你不能期望这个版本的代码在所有编译器和系统上都能正常工作。因此,建议始终在函数中显式地使用return语句来返回值。 |
|