首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

對“全局變量和函數的聲明”的不解,该如何解决

2012-05-15 
對“全局變量和函數的聲明”的不解#ifdefXXX_GLOBALS#define XXX_EXT#else#define XXX_EXTextern#endif例如O

對“全局變量和函數的聲明”的不解

#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是不出现的。

热点排行