分享

在头文件中定义全局变量

 书剑阁2013 2015-05-08

让我们先来看一个例子。

在下面的工程中,共有三个文件: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

这样就可以了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多