让我们假设下面的c代码:
#include <stdio.h>
#include <cs50.h>
int test (int a, int b);
int main(void)
{
test(2,3);
}
int test (int a, int b)
{
int c = a+b;
printf("%d \n", test(a,b));
return c;
}
为什么不可能打印test的值而不需要在打印变量之前将其保存在变量中?我得到了错误:
功能。c:12:1:错误:通过此函数的所有路径都将调用其自身[-Werror,-Winfinite-recursion]
谢谢你,谢谢你
#include <stdio.h>
#include <cs50.h>
int test (int a, int b);
int main(void)
{
test(2,3);
}
int test (int a, int b)
{
int c = a+b;
printf("%d \n", test(a,b));
return c;
}
2条答案
按热度按时间pvcm50d11#
正如编译器消息所说,函数将调用自身,因为在
printf("%d \n", test(a,b));
中,代码test(a,b)
调用test
。在对test
的调用中,函数将再次调用自身,并且这将永远重复(直到C实现的极限)。若要打印函数的返回值,请在函数外部执行:
hgqdbh6s2#
错误信息很清楚,test-function调用它自己,在 that 调用中,它再次调用它自己(一次又一次......)。
它永远不会完成。
这是一种无限循环,通常称为***无限递归***。
也许你想要的是什么?