我的经验,供你参考:
***********************************************
模块化编程的步骤
一、创建头文件
建立一个.c文件(源文件)和一个.h文件(头文件)。原则上.c文件和.h文件同名;文件名要有意义,最好能够体现该文件代码的功能。例如延时函数相关的源文件和头文件命名为:delay.c与delay.h
二、防重复包含处理
在.h文件文件中加入如下代码:
#ifndef XXX
#define XXX
……
#endif
在同一个工程中各个.h文件的XXX不能相同,因此推荐使用一下规则:将.h文件的文件名全部大写,“.”替换成下划线“_”,首尾各添加两个下划线“__”作为XXX。
例如delay.h
#ifndef __DELAY_H__ //如果没有定义这个宏
#define __DELAY_H__ //则定义该宏
……
#endif
三、代码封装
将需要模块化的代码封装成函数与宏定义。函数先在头文件里面声明一下,函数体放在.c文件中,需要被外部调用的宏定义放在.h文件中,仅会被本.c文件调用的宏定义放在.c文件中。
尽量少用或不用全局变量,必须要用的全局变量的定义放在.c文件中,当需要调用外部全局变量,需要在.h文件中用extern重新声明一下。
四、使用源文件
将.c文件添加到工程之中,同时在需要调用.h文件中的宏或者函数的.c文件中添加代码将该.h文件包含进去。
所包含的头文件中的函数,宏定义,全局变量可以在.c文件中自由调用。
#include <reg52.h> //系统的头文件用尖括号
#include "delay.h" //自己定义的头文件用引号
五、特别注意
在主源文件中只能包含.h文件,因为.h文件中已定义了所有的函数名称,而不能包含与.h文件同名的.c文件。
六、如果要声明一个全局数组(或变量),则除了在.h文件中声明外,还要在.c文件中定义,比如:
在.h文件中声明:
extern uchar xdata RX8025TimeBuffH[]; //转换好的时钟数据:秒、分、时、周、日、月、年
在.c文件中定义:
uchar xdata RX8025TimeBuffH[]={0,13,3,3,10,4,24}; //转换好的时钟数据:秒、分、时、周、日、月、年
特别注意:在.h文件中,全局变量只能声明,而不能赋初值。
七、本模块使用的普通变量在.c文件中定义,但常量和I/O口的宏定义放在.h文件中。 |