在头文件中定义全局变量

让我们先来看一个例子。

在下面的工程中,共有三个文件:main.cpp、func.cpp、var.h。

其中var.h中定义了一个int型的变量:

1 //var.h
2 
3 #ifndef __VAR_H_
4 #define __VAR_H_
5 
6 int var = 10;
7 
8 #endif

在func中定义了一个函数,返回刚才定义的var变量:

1 //func.cpp
2 
3 #include "var.h"
4 
5 int func(void)
6 {
7     return var;
8 }

最后是main.c,在main函数中调用func函数

 1 //main.cpp
 2 #include <stdio.h>
 3 #include "var.h"
 4 
 5 int func(void);
 6 
 7 int main(void)
 8 {
 9     int i = func();
10 }

接着编译,链接。编译时不会有错误,但是链接时会报错。在VC6中提示错误如下:

func.obj : error LNK2005: "int var" (?var@@3HA) already defined in main.obj
Debug/temp.exe : fatal error LNK1169: one or more multiply defined symbols found

这是一个常见的错误。这里

但是有时候,确实把一些全局变量定义在一个头文件里会比较方便。下面介绍一个常见的方法:

 1 //global.h
 2 #ifdef GLOBAL_VARIABLES_HERE
 3 #undef EXTERN
 4 #define EXTERN
 5 #endif
 6 
 7 //下面是全局变量的定义
 8 //前面加上EXTERN修饰
 9 
10 EXTERN int var;

这样,在global.cpp中通过定义GLOBAL_VARIABLES_HERE宏,能够将EXTERN展开成空宏。而其它地方(一般在重要的头文件里):

1 #define EXTERN extern

这样就可以了

原文地址:https://www.cnblogs.com/02xiaoma/p/3006542.html