對“全局變量和函數的聲明”的不解
#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;"
[解决办法]