读书人

“全局量和函的明”的不解,该

发布时间: 2012-05-15 14:35:29 作者: rapoo

“全局量和函的明”的不解

#ifdef XXX_GLOBALS
#define XXX_EXT
#else
#define XXX_EXT extern
#endif

例如OS_CPU.H中

#ifdef OS_CPU_GLOBALS
#define OS_CPU_EXT
#else
#define OS_CPU_EXT extern
#endif

.H中文件每个全局变量都加上了XXX_EXT的前缀。XXX代表模块的名字。该模块的.C文件中有以下定义:

#define XXX_GLOBALS
#include "includes.h"

当编译器处理.C文件时,它强制XXX_EXT(在相应的.H文件中可以找到)为空,(因为XXX_GLOBALS已经定义),所以编译器给每个全局变量分配内存空间
疑:

OS_GLOBALS经过了定义,什OS_EXT要被置空?置空是什意思,指教,
[size=24px][/size]

[解决办法]
一个全局变量只能在一个c文件中定义(分配内存空间)。
如:int a;

而它在其它文件中要被访问,就要做外部声明,如:
extern int a;

那么对这个a变量的使用,"int a;"只能有一个c文件出现,"extern int a;"语句可以出现在多个c文件

至于你的问题,
当c文件中定义了XXX_GLOBALS,则XXX_EXT为空,相当于"int a;"
否则相当于"extern int a;"

[解决办法]

探讨
若是像你这样说的,那么OS_EXT只是一个局部标记符罢了,实质上没有用的,对吧,正如编译器处理时,OS_EXT是不出现的。

读书人网 >WinCE

热点推荐