码迷,mamicode.com
首页 > 编程语言 > 详细

c语言函数的隐式声明

时间:2016-12-04 13:36:34      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:使用   erro   class   include   返回值   隐式   for   ict   nbsp   

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语言函数的隐式声明

标签:使用   erro   class   include   返回值   隐式   for   ict   nbsp   

原文地址:http://www.cnblogs.com/sklyn/p/6130449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!