看着标题,定义上面加了一个引号,这个得注意了。怎么解释呢,一般而言,变量只能定义在.c文件中,声明变量才在.h文件中。下面就打破常规,把定义变量的语句放在.h文件中,但是对实际而言,变量定义在头文件中是表面上的。
下面直接给出代码,有三个文件a.h a.c main.c:
a.h里面的代码:
#ifndef A_H
#define A_H
#ifdef A_C //该句宏定义一般放在相应的.c文件中,当然也只能宏定义一次
int myVar = 0;
#else
extern int myVar; //如果没定义其他的c文件中没定义该宏,就相当于引用了该变量
#endif
extern void Print(void);
#endif
a.c里面的代码:
#define A_C //注意了该宏定义,表示myVar是在c文件中完成定义的
#include "a.h"
#include <stdio.h>
void Print(void)
{
printf("myVar = %d\n", myVar);
}
main.c
#include "a.h" //本文件中没定义A_C该宏,相当于对myVar引用
int main()
{
Print();
myVar = 1; //看到了么,这里面直接引用myVar变量
Print();
return 1;
}
讲解完了,其实这些技巧在ucos源代码中体现的很明显,生活中就是要不断的学习,加油。