首页 > 代码库 > c语言函数的隐式声明

c语言函数的隐式声明

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

 

c语言函数的隐式声明