我在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);
}
Run Code Online (Sandbox Code Playgroud)
我知道这可以用一个参数函数完成,但这不是重点.
我得到的错误是:'fact'的冲突类型(函数声明行)此处隐含的事实声明(与printf一致)
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以移动fact上面的实现main.但是请注意,这种方法不会扩展到更复杂的程序,而更长的函数会相互调用.
添加 你的阶乘功能是错误的.这是更正后的版本
long int fact(long int n)
{
if (a == 1)
return (n);
return n * fact(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |