关于单片机 模块化编程的 问题
如果只有源文件m.c没有m.h头文件我在另一个源文件中直接用extern包含m.c中用到的函数,这样可以吗?如果可以的话为什么我们还要做头文件.h呢。直接全是源文件不就可...
如果只有源文件m.c 没有m.h头文件 我在另一个源文件中直接用extern包含m.c中用到的函数 ,这样可以吗?
如果可以的话 为什么我们还要做头文件.h呢 。直接全是源文件不就可以了吗 展开
如果可以的话 为什么我们还要做头文件.h呢 。直接全是源文件不就可以了吗 展开
2个回答
展开全部
可以,但是加了头文件有几点好处:首先模块化更清晰;通过头文件申明需要对外提供调用的函数,比你在其他C文件里面用extern 申明要方便。举个例子,现在有main.c,a.c,b.c三个C文件,当你在main.c需要用到的a.c里的函数,且函数很多,好几十个,你需要在main.c写好几十个extern申明的函数语句。如果你还需要在b.c调用的话,还要在b.c里面写几十个申明语句。当你还需要在其他C文件里面调用的话,那工作量就太大了。如果我们写个h文件,然后在里面去extern申明需要对外提供的函数,其他C文件里面调用只需要写个#include "a.h"即可,方便且快捷。
展开全部
1.头文件可以预先告诉编译器一些必要的声明,让编译器顺利进行下去,在连接实现以前.未必出现实际的定义.
头文件的意义在
2.使得程序简明,清晰.
3.避免了重复编写相同的声明代码.
4.**.c和**.h文件没有必然的联系.
其实要理解C文件与头文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:
1.预处理阶段 (处理C中包含的H)
2.词法与语法分析阶段 (判断声明,压栈,分配,预留空间)
3.编译阶段(不同的.c生成不同的.obj),首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件
4.连接阶段(l链接不同的.obi,生成目标代码,比如.hex .exe),将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制
码,也就是去掉了文件格式信息。.
头文件的意义在
2.使得程序简明,清晰.
3.避免了重复编写相同的声明代码.
4.**.c和**.h文件没有必然的联系.
其实要理解C文件与头文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:
1.预处理阶段 (处理C中包含的H)
2.词法与语法分析阶段 (判断声明,压栈,分配,预留空间)
3.编译阶段(不同的.c生成不同的.obj),首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件
4.连接阶段(l链接不同的.obi,生成目标代码,比如.hex .exe),将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制
码,也就是去掉了文件格式信息。.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询