在C语言编程中经常会遇到全局变量。全局变量的定义一般采用下面的方式
.C文件中定义
int g_a;
.h文件中声明
extern int g_a;
使用上面这种方法,当需要更改全局变量时候就需要更改两个地方。uC/OS-II使用了另一种巧妙的全局变量定义的方法,使得声明和定义都在一个地方,提高代码的可读性和维护性。
//在ucos_ii.h
#ifdef OS_GLOBALS
#define OS_EXT
#else
#define OS_EXT extern
#endif
OS_EXT INT32U OSIdleCtr;
OS_EXT INT32U OSIdleRun;
OS_EXT INT32U OSIdleMax;
在//在ucos_ii.c
#define OS_GLOBALS
#include"ucos_ii.h"
在其他.c文件包含ucos_ii.h文件时候,不打开宏定义,此时其他.c文件就是一个外部变量声明。
这样变量的声明和定义通过宏定义就可以都坐在头文件中,当我们需要修改全局变量时候,就比较方便。