c语言里变量必须先声明后使用,函数也不例外,这点和js,php不一样。
double function(void){ return 100.0;
}
定义一个函数第一行,声明了函数的名字,参数类型个数,返回值,这称为函数原型,
函数原型也可单独写,不带函数体
double function(void);
编译器只有碰到函数原型的时候才知道这个函数的名字,参数类型个数返回值,到函数调用的时候才知道如何生成指令,所以函数原型必须出现在函数调用之前。
以下两段代码都能得到正确的结果。
#include<stdio.h>
double function(void){
return 100.0;
}
int main(void){
printf("%f", function());
return 0;
}
#include<stdio.h>
int main(void){
double function(void);//函数原型
printf("%f", function());
return 0;
}
double function(void){
return 100.0;
}
如果去掉声明函数原型那一行。在main函数中调用function函数时并没有声明它,编译器认为此时隐士声明了int function(void);隐士声明的函数返回值都是int,由于我们调用function的时候没有传参数,所以编译器认为这个隐式函数的参数类型是void。
然后编译器接着往下看,看到function函数的原型是 double function(void);和先前隐式声明的类型不一致。
所以报错 error: conflicting types for ‘function’ previous implicit declaration of ‘function’ was here