本期介绍🍖
主要介绍:函数声明和定义真正的用法,函数声明和定义与头文件关联使用。
目录🍖
前言🍖
想必大家应该在课本上都学过
函数声明和定义的用法
(
即:如果函数的定义出现在函数的调用之后,就必须在调用之前引用一个函数的声明,不然编译器将会报警告:
函数未定义
)。
为什么会报警告呢,下面不是已经定义该函数了吗?这是因为
编译器在处理代码前会先从上往下的进行一次扫描
,当扫描到函数的调用的时候,编译器愣住了,它不认识这个函数啊从来没有见过,当然会给你一个警告。然后接着往下扫描直到扫到函数的定义,编译器这时才幡然醒悟:奥!其实这个函数是存在的,只不过是放到了后面。可之前已经报了警告,还能收回来?当然不能。所以这就是为什么该程序在编译时会报警告但该程序还能正常运行起来的原因。那么在调用之前引用一个函数的声明,就是在告编译器程序中存在这么一个函数,这样就可以避免警告了。值得注意的是:
函数声明仅仅只是告诉你有那么个函数,但并没有仔细的说明该函数到底长啥样啊;而定义才是真正说明这个函数的
!!!
可大家仔细思考一下,函数声明是这么拿来这么用的吗?那我为什么不直接把函数的定义直接写在最前面,非得死乞白赖的给它写在后面然后前面安个函数的声明。这岂不是有些弱智了?所以我想说的是:书上讲的关于函数声明的用法是存在的,但这并不是其真正的用法。那函数的声明真正的用法到底是什么呢?下面我就来仔细说说吧。
函数声明和定义真正的用法🍖
故事背景,以及思路🍖
在初学C语言的时候,我们会觉得把所有代码全都写到一个源文件中最为方便,但实际上并不是这么写代码的!你想啊,如果公司里就只有一个源文件,所有人员都是在这里面写代码,那必然会发生:
一个人在写代码的时候,其余人是不能写代码
(
即:今天A程序员写代码,明天B程序员写代码,后天C程序员写代码……
),效率极其低下公司不倒闭才怪。所以肯定不会这样去写代码的。那该如何写代码呢?我们写代码应从那些角度来考虑呢?
1.
协作性
从协作的角度来思考,每个都应把代码写在自己的文件中(
因为这样就能实现公司所有成员同时在对该程序进行编写
),等到所有成员都完成了手头上分配的任务,再拼装起来就可以高效的完成该工程了。
2.
模块化
从模块化的角度来思考,应使得每个文件都拥有自己独立的功能,把不同的功能按模块化分开来(
就譬如:实现权限的呢放一个文件,实现文件操作的呢放一个文件,实现数据库操作的呢放一个文件……
)。这样做就可以使得在阅读这个程序时更易读取,在维护这个代码时更加的方便。
头文件的使用🍖
那该如何做到协作性和模块化的编写代码的方法呢?我先说明两个知识点:
1.
函数是具有外部链接属性的
可以在一个源文件中调用另一个源文件中的定义的函数,只不过需要在该文件中包含以下这个函数的声明。
2.
头文件的引用
若我们创建了一个头文件,文件名为:xxxxx.h。如果在一个源文件中用
#include" xxxxx.h "
来调用该头文件,那么这次调用相当是把头文件中所有的内容拷贝了一份放到那个源文件中。注意:
包含自己写的头文件用双引号来
"xxxxx.h"
,
而包含库函数的头文件用尖括号
<xxxxx.h>
。
你看若我在每个源文件都定义一个实现不同功能的函数,然后再把这写函数的声明全部放到头文件中,再在主函数的源文件中对该头文件进行引用,这样主函数是不是就可以随时随地的对这些函数进行调用了呀!这是不是就做到了具有协作性和模块化的编写代码的方法。
总结🍖
C语言课本上讲的“ 函数的定义放在后面,函数的声明放在前面 ”这种用法可能仅仅时举个例子而已,并不是真正的用法。
而函数声明是放在头文件中,函数定义是放在源文件中,然后包含头文件就可以使用对应模块的代码了
,这才是函数声明和定义真正的用法
。
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。