前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c语言函数的隐式声明

c语言函数的隐式声明

作者头像
用户3094376
发布2018-09-12 11:27:43
2.7K0
发布2018-09-12 11:27:43
举报
文章被收录于专栏:gaoqin31

c语言里变量必须先声明后使用,函数也不例外,这点和js,php不一样。

代码语言:javascript
复制
double function(void){  return 100.0;
}

定义一个函数第一行,声明了函数的名字,参数类型个数,返回值,这称为函数原型,

函数原型也可单独写,不带函数体

代码语言:javascript
复制
double function(void);

编译器只有碰到函数原型的时候才知道这个函数的名字,参数类型个数返回值,到函数调用的时候才知道如何生成指令,所以函数原型必须出现在函数调用之前。

以下两段代码都能得到正确的结果。

代码语言:javascript
复制
#include<stdio.h>

double function(void){
    return 100.0;
}

int main(void){
    printf("%f", function());
    return 0;
}
代码语言:javascript
复制
#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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-12-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档