
但是有的时候我们写程序比较大的时候头文件很多,我们就需要不断的对同一全局档键变量重复声明,这样很行指巧繁琐而且低效。所以我们需要一种只需要在一种定义一次其它文件就不需要写声明的方法。在看到uC/Os 实时 *** 作系统源码的时候我发现了这种方法。
比如我把全局变量定义在a.h文件里面。如下
#ifdef QUANJU
#define EXTN //定义EXTN为空
#eles
#define EXTN extern
#endif
EXTN char g_test1;
然后在b.c:
#define QUANJU
#include "a.h"//在该文件中a.h定义了一次g_test1
在d.c:
#include "a.h"//在该文件中a.h声明g_test1
上面三个文件中a.h文件逗尺里面的功能是:假如定义了QUANJU则EXTN 为空, 就把“EXTN char g_test1;”当成全局变量g_test1的定义(即 char g_test1)。假如没有定义QUANJU则EXTN 为extern,就把“EXTN char g_test1;”当成声明(即“extern char g_test1”)
然后无论什么文件使用全局变量g_test1,只要调用a.h,就不用再声明了。因为只要调用a.h由于没有宏定义QUANJU所以就等于在a.h声明了g_test1。只有b.c文件里面宏定义了QUANJU所以b.c里面调用的a.h就是定义g_test1。
一仿凳般来说,不会将全局变渗大桥量的定义写在头文件中,因为如果多个c源文件都添加了头文件,那很容易引起重定义的问题,这时候一般编译器都会提示。
正确的作法是在c源文件中定义一个全局变量。在头文件中加入全局变量的声明。比如
//var.c 一个主要用于定义全局变量的c源文件int g_a
char g_x
//var.h 用于声明定义的全局变量
extern int g_a
extern char g_x
//test.c 一个用于测试的丛猛头文件
#include <var.h>
void f(){
g_a = 1
g_x = 'x'
}
C语言可以通过在.c文件中定义,头文件中extern的方式实现一个能够在所有文件中都可以使用帆信的全局数组变量。
具体做法如下:
设有一个多项目文件有 1.c、2.c和3.c三个源程序文件;茄盯
如果有一个全局数组需要所有文件使用,那颤轿和么可以添加一个data.c文件,在其中添加全局数组的定义;
向项目中添加data.h文件,在data.h文件中用 extern声明该数组;
只需要在相应的.c文件中添加#include "data.h",那么久可以使用data.c中的全局数组了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)