在gcc 4.7.2(Ubuntu Server 12.10)上编译此代码时遇到问题
#include <stdio.h>
int main()
{
long int facto = 30;
printf("%ld\n", fact(facto, facto - 1);
}
long int fact(long int n, long int a)
{
if (a == 1)
return (n);
fact(n * a, a - 1);
}
我知道这可以用一个参数函数来完成,但这不是重点。
我得到的错误是:'fact'的冲突类型(函数声明行) 以前隐含的事实声明(与printf一致)
答案 0 :(得分:6)
在您从fact
main
的转发声明
long int fact(long int n, long int a); // forward declaration
int main()
{
long int facto = 30;
printf("%ld\n", fact(facto, facto - 1);
}
long int fact(long int n, long int a) // actual function
在这种情况下,您可以将fact
的实施移到main
之上。但是请注意,这种方法不能扩展到更复杂的程序,而更长的函数会相互调用。
添加强> 你的阶乘功能是错误的。这是更正后的版本
long int fact(long int n)
{
if (a == 1)
return (n);
return n * fact(n - 1);
}
答案 1 :(得分:0)
#include <stdio.h>
long int fact(long int n, long int a);
int main()
{
long int facto = 30;
printf("%ld\n", fact(facto, facto - 1);
}
long int fact(long int n, long int a)
{
if (a == 1)
return (n);
fact(n * a, a - 1);
}
你需要一个函数原型,它基本上是带分号的函数的第一行。这将告诉编译器该函数是否存在。