说明一:模块即是一个.c和一个.h的结合,头文件(.h)是对该模块的声明。

说明二:某模块提供给其他模块调用的外部函数以及数据需在所对应的.h文件中冠以extern关键字来声明。

说明三:模块内的函数和变量需在.c文件开头处冠以static关键字声明。

说明四:永远不要在.h文件中定义变量。

先解释一下说明中的两个关键词:定义和声明。相信读者都是学过C语言的,本应该对这两个词理解的很透彻,可笔者在培训时发现,好多人都搞不清楚,都是凭着感觉写的,高兴了就用定义,不高兴了就用声明,这样做当然是不对的,换句话说是错的。

什么是定义和声明?

所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或者对象名。但注意,这个名字一旦和这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊),它们就同生共死,终生不离不弃,并且这块内存的位置也不能被改变。一个变量或对象在一定的区域内(比如函数内)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个变量或对象。

什么是声明?声明确切的说应该有两重含义:

(1)告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的。声明可以出现多次。

(2)告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名或对象名。比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预订,别人再也不允许使用这个座位。其实这个时候你本人并没有坐在这个座位上。这种声明最典型的例子就是函数参数的声明,例如:void fun(int i, char c)。