gpt4 book ai didi

C函数返回正确结果但没有给出return语句,为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:09 27 4
gpt4 key购买 nike

所以我编写了一个应该返回第 n 个斐波那契数的函数,但我忘了实际返回我的结果。我确实收到了“控件到达非空函数的末尾”警告,但代码执行正常并返回了正确的结果。这是为什么? C 如何知道它应该返回“结果”?

int fib (int n);

int main(int argc, char** argv) {
printf("%d", fib(10));

}

int fib (int n){
if (n == 1){
return 1;
}
if (n == 0){
return 0
}
fib(n-2) + fib(n-1)
}

它返回了这个

55

我试过添加

 int j = n+1

到函数的最后一行,然后它实际上返回了2,而不是256。这是一个错误,还是c如何读取这样的东西?

最佳答案

到达非 void 的末尾没有 return 的功能语句调用未定义的行为。获得预期结果是一种未定义的行为,通常称为运气。顺便说一下,256可能是您所期望的,但它不是正确的

一个可能的解释是:由函数计算并存储到通常包含返回值的寄存器中的最后一个值是预期结果。

当然,您永远不应该依赖它,也不应该期待它。

这是使用编译器警告的一个很好的例子:不要忽略它们。始终打开更多编译器警告并修复代码。 gcc -Wall -Wclang -Weverything可以发现许多愚蠢的错误并节省数小时的调试时间。

还有一些问题:

  • 您不包括 <stdio.h>
  • 你计算了一个unsigned long long但只返回一个可能更小的类型 int
  • 您的算法计算 2 的幂,而不是斐波那契数列。

关于C函数返回正确结果但没有给出return语句,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39054285/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com