UCOS —— 全局变量的定义和声明

全局变量在定义后,可被其他模块通过extern关键字调用; 一旦extern关键字使用错误,则会造成重复定义的错误!UCOS 中做了一个巧妙的处理,通过模块.c文件调用模块对应的.h文件,实现全局变量的定义,其他C文件调用这个.h文件,则会作为extern处理。

这个巧妙地处理具体如下: 

1. 在.h文件中定义全局宏:xxx_EXT

#ifdef   xxx_GLOBALS
#define  xxx_EXT
#else
#define  xxx_EXT  extern
#endif

其中xxx是模块名。

2. 在.c文件中定义私有宏: xxx_GLOBALS

#define xxx_GLOBALS
#include "includes.h"

 includes.h 是主头文件, 包含所有的头文件。

3. 编译器处理xxx.c文件

由于定义了xxx_GLOBALS, 编译器强制xxx_EXT为空, 给每个定义的全局变量分配内存空间。

4. 编译器处理other.c文件

xxx_GLOBALS是xxx的私有宏,其他c文件没有定义,所以编译器认为xxx_EXT为extern,不产生内存分配, 这样在这个c文件中就可以调用外部全局变量了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值