在頭文件中定義全局變量


讓我們先來看一個例子。

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

這樣就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM