错误消息"format'%ld'需要类型为'long int'的参数,但参数2的类型为'int'"

Duk*_*ium 2 c recursion factorial

我正在编写一个简单的程序来查找第一个'n'整数的阶乘.但是在编译时我遇到了这个错误.甚至认为fact()函数的返回类型是long int,错误仍然存​​在.

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i;
    for(i=0;i<30;i++)
        printf("%ld\n", fact(i));
    return 0;
}

long int fact(int n){
    if(n==0)
        return 1;
    else 
        return (long)(n*fact(n-1));
}
Run Code Online (Sandbox Code Playgroud)

错误:

fourth.c:7:3: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘int’ [-Wformat=]
printf("%ld\n", fact(i));
^
fourth.c: At top level:
fourth.c:11:10: error: conflicting types for ‘fact’
long int fact(int n){
         ^
fourth.c:7:19: note: previous implicit declaration of ‘fact’ was here
printf("%ld\n", fact(i));
               ^  
Run Code Online (Sandbox Code Playgroud)

sim*_*onc 8

您需要提供前瞻声明 fact

long int fact(int n);
int main(){
    // body
}
long int fact(int n) {
    // body
}    
Run Code Online (Sandbox Code Playgroud)

如果没有这个,ansii C假定一个没有事先声明的函数或实现将返回 int