当前位置: 代码迷 >> WinCE >> 對“全局變量和函數的聲明”的不解,该如何解决
  详细解决方案

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

热度:58   发布时间:2016-04-28 13:05:28.0
對“全局變量和函數的聲明”的不解

#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是不出现的。
  相关解决方案