发新帖我要提问
12
返回列表
打印

单片机 C51 两种编写头文件方法 哪个比较好

[复制链接]
楼主: 349264710
手机看帖
扫描二维码
随时随地手机跟帖
21
E007| | 2010-9-30 22:22 | 只看该作者 回帖奖励 |倒序浏览
楼上好多说的都不错,不过我觉着都说的不完整,我最近也在写一个软件,不过不是MCU程序,而是计算机软件,其中N多模块,算到一起大概得有三十多个文件(包括源文件和头文件),我总结下我的写法。
假设一个程序有多个模块,那么每个模块一个 xx.c和一个xx.h对应,在xx.h中只声明函数和变量,对于在只在本模块中引用的变量或函数,不必在 xx.h中声明,而只在 xx.c中声明甚至可以不声明(只要你记得住),而在 xx.c 中具体定义。另外,对于全局各模块都要用到的宏定义之类的,可以单独写一个头文件,例如命名为:common.h,这样,需要引用哪个,就包含哪个头文件即可。在更改个别模块时,编译器也不会去把全部源文件都编译一遍。为了使编译器不会报类似“XX变量重定义”之类的错误,在每个头文件中声明全局唯一的宏定义来避免。
举例:如果有一项目中有 main,keyboard和display三个模块,则创建如下文件:
main.c
main.h
keyboard.c
keyboard.h
display.c
display.h
common.h
每个 xx.c文件包含对应的 xx.h文件、公用头文件(common.h)、引用到的其它模块的 xx.h和系统的库文件(如:stdio.h等),如果在某个模块的头文件中就已经需要common.h中的定义,也可以将其引用放在头文件中。在每个头文件中增加一个宏定义,以display.h为例:
//文件开头
#ifndef __DISPLAY_H__    //这个名字一般和模块名对应起来比较好,这样一般也不会重复,在VC的某些版本中,
//甚至使用了到了128位的GUID来保证这个名字的唯一性
#define __DISPLAY_H__

// 下面是你自己定义本模块中被外面引用的变量或/和函数的声明
extern int xxx;
......
extern void yyy( ... );
......
// 最后一行和第一行对应起来
#endif //#ifndef __DISPLAY_H__
这样就可以避免编译时的错误提示了。
这是C语言的写法,对于面向对象还有一种情况,类的继承,这时对应的是 xx.cpp和xx.h文件,在头文件中是类的定义,如果这个类是继承自另一个类,那么在头文件中就要引用另一个类的定义的头文件。不过我写MCU程序还没有用到,呵呵......
以上仅个人观点,也是从VC中学到的,谨供参考!

使用特权

评论回复
22
lirunze| | 2010-10-2 09:09 | 只看该作者
我都用.h文件

使用特权

评论回复
23
sysdriver| | 2010-10-3 11:37 | 只看该作者
关于C中的“头文件”:

C(或C++)中的所谓头文件其实就是编译中第一次扫描是所做的“文本嵌入”。有点类似于宏替代,只不过其被放置在一个独立的文件中而已。

由于头文件可以被多模快引用,因此通常不能将具体变 ...
HWM 发表于 2010-9-30 11:19


这个是最好的,希望能给出些例子,特别是处理母子的关系。

至于8楼的说法,虽然简化了,但维护肯能不方便。

使用特权

评论回复
24
doramin| | 2010-10-3 18:23 | 只看该作者
第二种好...每个source分别产生obj,主程序调用的时候直接link相应的obj就行了,否则还得compile一遍

使用特权

评论回复
25
烟不易冷| | 2010-10-3 20:57 | 只看该作者
学习

使用特权

评论回复
26
349264710|  楼主 | 2010-10-4 15:31 | 只看该作者
我又有一个问题了,为什么用keill的时候。比如要用到这个函数_corl_(x,y);只需要在keill中添加intrins.h这个头文件,而不用添加intrins.c,就可以编译通过。而:'(我写好头文件后必须同时加xxx.h和xxx.c到keill中,否则编译不通过。

使用特权

评论回复
27
E007| | 2010-10-9 15:44 | 只看该作者
因为系统的 xx.h 只是一个声明,xx.c文件不用你加是因为已经编译好了 xx.lib放在安装目录的lib目录下,编译器会直接去链接那些模块。

使用特权

评论回复
28
jamin.x| | 2011-10-12 15:59 | 只看该作者
如何自己写头文件???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则