讓我們先來看一個例子。
在下面的工程中,共有三個文件: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
這樣就可以了
