首页 > 技术文章 > 理解宏的使用 extern

yangxuli 2017-02-24 13:22 原文

如何定义一个全局变量在一个文件中,然后在其它文件中调用就行,而不需要多次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.clabel.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变量的定义。

对于全局变量我们应该尽量少去定义它,这样程序模块之间才能做到高内聚低耦合

宏的使用 extern

by 羊羊得亿
2017-02-24 ShenZhen

推荐阅读