Keil工程在h文件中定义变量
1. 背景
关于变量的定义,严谨的做法当然是在c文件中定义,h文件中声明。但总有人喜欢在h文件中定义全局变量,可能是喜欢集中管理全局变量,也可能是觉得一个变量要维护c和h两个地方太麻烦,总之有人有这个需求。
2. 思路
如果直接在h文件中定义就会在编译时报如下错误,也就是重复定义,这是因为有多个c文件包含了定义变量的h文件,每次包含都是一次定义,导致重复定义。
ERROR L104:MULTIPLE PUBLIC DEFINTIONS思路很简单,利用预编译指令,让第一次包含是定义,之后的包含是声明。重复声明是合法的,当然就不会报错了。
3. 方法
在定义变量的h文件中:
//--通过宏定义,实现在h文件中定义且声明变量--#ifndefEXTERN#defineEXTERNextern#else#defineEXTERN#endifEXTERNunsignedcharg_var;在main.c文件中:
#defineEXTERN//要放在包含h文件的语句前面这样在编译main.c时,EXTERN 这个宏是空的,包含的h文件中的语句就是变量定义;
在编译其它c文件时,EXTERN 这个宏是关键字 extern,包含的h文件中的语句就是变量声明;