对于C语言的.h文件的理解——函数声明

举报
holo.yh 发表于 2021/06/15 18:41:06 2021/06/15
【摘要】 之前学到主调函数写在被调函数前,若想调用则需先在主调函数前进行声明。今天对嵌入式小车的代码进行编写时对于这一点有了新的理解。由于在路线中需要大量使用 循迹+前进 组合语句,所以今天编写了一个简单函数“循迹+前进450”来将两个动作整合到一起,函数体中调用了循迹函数与前进函数。写完之后进行编译,我发现虽然在主调函数之前没有声明被调函数,但是却没有报错(如下图)。 于是我进行了百度(如下图,文...

之前学到主调函数写在被调函数前,若想调用则需先在主调函数前进行声明。今天对嵌入式小车的代码进行编写时对于这一点有了新的理解。


由于在路线中需要大量使用 循迹+前进 组合语句,所以今天编写了一个简单函数“循迹+前进450”来将两个动作整合到一起,函数体中调用了循迹函数与前进函数。写完之后进行编译,我发现虽然在主调函数之前没有声明被调函数,但是却没有报错(如下图)。

于是我进行了百度(如下图,文末附文章链接),发现drive.h文件好像是有函数声明的作用。

于是我打开drive.h文件(如下)

对照函数声明语句的格式(如下):

发现二者格式竟然是一样的,那么大概这就是函数声明语句了。为了验证这一想法,我将drive.h中的声明语句全部注释(如下图)

然后进行了编译,确实这次报错了——2个ERROR并给出了报错原因,大概意思就是说我没有进行声明(因为我只调用了循迹函数和前进函数,所以会报2个错)。

为了进一步验证是由于我没有声明而报的错,我在主调函数之前对两个被调函数进行了声明,编译后没有报错(如下图)

于是,我就验证了drive.h确实是起到声明函数的作用,其实明白了这一点后就不难理解:由于编译器是对每条语句按顺序逐条编译的,我们在头文件中已经写上#include "drive.h",那么编译器在对drive.c文件进行编译时,当编译到#include "drive.h"这一条语句时,就会跳转到drive.h内部对其中的语句进行编译,这样就认识了drive.h中声明的函数,所以就不需要在drive.c中进行声明。


回到百度中的文章,这位博主有提到在头文件中不但能声明,还可以定义,且与函数声明一样,在头文件中定义与在源文件中定义作用相同。由于时间关系先不进行验证,随后更新,大家可以参考下面两篇文章,有关于函数声明和定义的更详细介绍。



参考文章:

1.c语言中的.h文件的作用,在源文件(.c)和头文件(.h)中声明和定义的区别

https://blog.csdn.net/weixin_39735288/article/details/116993267

2.C语言函数的定义和声明

https://blog.csdn.net/xingzhe22222/article/details/98870457?utm_source=po_vip(相关知识点部分截图如下)





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。