如何定义一个全局变量在一个文件中,然后在其它文件中调用就行,而不需要多次extern外部声明。
由于之前的公司的程序中全局的变量使用得很多,在多个.C文件中会调用,不这样处理做的话就会多处进行extern,所以好处是可以把全局的变量给统一管理起来。
以下程序是label.c
文件
#define LABEL
#include "label.h"
以下程序是label.h
文件
#define label_h
#ifdef LABEL
#define extern
#endif
extern uint16 test;
#endif
如上程序中的label.c
和label.h
文件可知,如果定义了一个全局变量test,那么在其它的.C文件使用这个变量,只需要包含这个label.h
文件就可以,编译器在编译其它.C文件的时候会进入label.h
文件,由于#ifdef LABEL
这个条件不成立,所以程序就直接运行到 extern uint16 test;
,所以就相当于其它.C调用这个外部声明的变量。
那这个 uint16 test
变量在什么的地方定义?因为变量的定义在文件中只能是一次,不然编译的时候会报错,因为编译器在编译程序是会编译文件中的 label.c
,由程序可知会进入label.h
这个.H文件,由于有#define LABEL
,所以满足条件#ifdef LABEL
,有#define extern
是宏定义了extern 为空
,所以extern uint16 test
实际为uint16 test
,即是test变量的定义。
对于全局变量我们应该尽量少去定义它,这样程序模块之间才能做到高内聚低耦合
。
by 羊羊得亿
2017-02-24 ShenZhen