①模块即一个“.c”文件和一个“.H”文件的结合,“.h”头文件是对该模块接口的声明。
②某模块提供给其他模块调用的外部函数及数据需在“.h”文件中冠以extern关键字声明。
③模块内的函数和全局变量需在“.c”文件头冠以static关键字声明。
④永远不要再“.h”文件中定义变量。
定义变量和声明变量的区别在于定义会产生分配内存的操作,这是汇编阶段的概念;声明则只是告诉包含该声明的模块在连接阶段从其他模块寻找外部函数和变量。
例如:
/*module1.h*/
Int a=5; /*在模块1的.h文件中定义int a*/
/*module1.c*/
#include”module1.h” /*在模块1中包含模块1的.h文件*/
/*module2.c*/
#include”module1.h” /*在模块2中包含模块1的.h文件*/
/*module3.c*/
#include”module1.h” /*在模块3中包含模块1的.h文件*/
以上程序的结果是在模块1、2、3中都定义了整型变量a,变量a在不同的模块对应不同的地址单元,实际上这样的程序是不必要的。
正确做法如下:
/*module1.h*/
extern Int a; /*在模块1的.h文件中声明int a*/
/*module1.c*/
#include”module1.h” /*在模块1中包含模块1的.h文件*/
int a=5; /*在模块1的”.c”文件中定义int a */
/*module2.c*/
#include”module1.h” /*在模块2中包含模块1的.h文件*/
/*module3.c*/
#include”module1.h” /*在模块3中包含模块1的.h文件*/
这样如果模块1、2、3操作变量a的话。对应的是同一内存单元。