全局变量在头文件中“定义”

        看着标题,定义上面加了一个引号,这个得注意了。怎么解释呢,一般而言,变量只能定义在.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源代码中体现的很明显,生活中就是要不断的学习,加油。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值