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
时间: 2024-10-20 04:48:11