background image

/*模块 1 头文件:module1.h*/
int a = 5; /* 在模块 1 的.h 文件中定义 int a */
/*模块1实现文件:module1 .c*/
#include “module1.h” /* 在模块 1 中包含模块 1 的.h

 

文件 */

/*模块 2

 

实现文件: module2.c*/

#include “module1.h” /* 在模块 2 中包含模块 1 的.h

 

文件 */

/*模块 2 实现文件:module3 .c*/
#include “module1.h” /* 在模块 3 中包含模块 1 的.h

 

文件 */

以上程序的结果是在模块 1、2、3 中都定义了整型变量 a,a 在不同的模块中对应不同的地
址单元,这明显不符合编写者的本意。正确的做法是:
/*模块 1 头文件:module1.h*/
extern int a; /* 在模块 1 的.h 文件中声明 int a */
/*模块1实现文件:module1 .c*/
#include “module1.h” /* 在模块 1 中包含模块 1 的.h

 

文件 */

int a = 5; /* 在模块 1 的.c 文件中定义 int a */
/*模块 2 

 

实现文件: module2 .c*/

#include “module1.h” /* 在模块 2 中包含模块 1 的.h

 

文件 */

/*模块 3 

 

实现文件: module3 .c*/

#include “module1.h” 

 

  /* 在模块 3 中包含模块 1 的.h

 

文件 */

规则 4 如果要用其它模块定义的变量和函数,直接包含其头文件即可。
许多程序员喜欢这样做,当他们要访问其它模块定义的变量时,他们在本模块文件开头
添加这样的语句:
extern int externVar; 

  抛弃这种做法吧,只要头文件按规则 1 完成,某模块要访问其它模块中定义的全局
变量时,只要包含该模块的头文件即可。

(4 “

) 数组名就是指针

  许多程序员对数组名和指针的区别不甚明了,他们认为数组名就是指针,而实际上
数组名和指针有很大区别,在使用时要进行正确区分,其区分规则如下:

  规则 1 数组名指代一种数据结构,这种数据结构就是数组;
  例如:
char str[10];
char *pStr = str;
cout << sizeof(str) << endl;
cout << sizeof(pStr) << endl;

  输出结果为:
 10
4
  这说明数组名 str 指代数据结构 char[10]。