因为你的函数的返回类型是int
. 当您有一个尚未声明的函数调用时,返回类型默认为int
C 语言。在您的情况下,调用 func(1,2);
, 默认为int
,而后面定义的函数也是 , int
。这就是为什么没有冲突。
当您将返回类型更改为 以外的任何内容int
时,您将收到错误消息。
例如下面的代码给出conflicting-types
错误,因为。函数调用隐式声明了一个int
返回函数,后来原始函数定义具有类型float
。
此代码给出了错误:
#include<stdio.h>
int main(){
float ret;
printf("\n main() is called! \n");
ret = func(1,2);
printf("\n The ret value is : %f \n",ret);
return 0;
}
float func(int x,int y){
printf("\n func() is called! x: %d , y : %d \n",x,y);
if(x == 1){
return x+y;
}
else{
return y-x;
}
}
编辑:
在 C 语言中,在编译器的早期阶段,首先当看到函数调用时,它们被隐式声明,然后在后期阶段搜索定义。因此,当搜索失败时,它会给出未定义的函数错误,但不会给出未声明的函数。但是当定义存在但类型冲突时,会给出冲突类型错误......但在您的情况下,默认声明和原始声明是相同的,这就是您没有收到任何错误的原因。
您还必须注意,如果函数在未看到声明后立即定义,则无需立即中止编译。首先,它只是标记implicit
声明,如果根本没有定义,则代码中的任何位置都没有。然后它抛出undefined function error
.