extern可以置於變量或者函數前,以標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。此外extern也可用來進行鏈接指定。
也就是說extern有兩個作用,第一個,當它與"C"一起連用時,如: extern "C" void fun(int a, int b);則告訴編譯器在編譯fun這個函數名時按着C的規則去翻譯相應的函數名而不是C++的,C++的規則在翻譯這個函數名時會把fun這個名字變得面目全非,可能是fun@aBc_int_int#%$也可能是別的,這要看編譯器的"脾氣"了(不同的編譯器採用的方法不一樣),爲什麼這麼做呢,因爲C++支持函數的重載啊,在這裏不去過多的論述這個問題,如果你有興趣可以去網上搜索,相信你可以得到滿意的解釋!
C++支持了分離式編譯(separate compilation)機制,它允許將程序分爲若干個文件,每個文件可被獨立編譯。這樣說明了,當你的程序有很多文件時,修改其中一個文件後不需要將所有文件都重新編譯一遍,只需要編譯修改過的就好,然後將它們都鏈接起來。
下面僅說明第一個作用
在.cpp文件中定義變量,在.h文件中聲明變量加extern,如果其他文件中需要訪問變量,只需包含其頭文件就可以了。
舉例:
aa.h
extern int mm;
aa.cpp
int mm = 1;
在bb.cpp中訪問變量mm
bb.cpp
#include "aa.h"
int res = 0;
mm++;
res = mm;
cout<<res<<endl; 輸出:2