1.對於變數或函數,可以宣告多次,但只能定義一次。
2.C++中,尋找變數或函數時,是採用Lookup(向上尋找定義或宣告)。
main,cpp ~~~~~~~~~~
int main()
{
a=100;
}f(); return 0; f.cpp ~~~~~~~~~~
int a;
void f() {
;
} |
當你用compiling這二個檔案時,會得到a、f符號沒有定義。因為C++向上尋找定義或宣告時,未發現這二個符號,所以我們要把程式改寫如下:
main.cpp ~~~~~~~~~~
extern int a;//extern一定要加
exter void f();//extern可加可不加 int main() {
a=100;
} f(); return 0; f.cpp ~~~~~~~~~~
int a;
void f() {
;
} |
這兒有幾點注意的事項:
1.C++ 中只允許變數或函數的定義出現一次。由於變數只有定義規則,沒
有宣告規則,所以當你鍵入int a;時,代表此變數已經被定義了。我們如
何宣告一個變數呢?加上extern 變成exern int a;,告訴comipler,此變數a只
是一個宣告,它的定義在別處。
2.函數規則分成宣告與定義二種。當一個函數只有傳回值、名稱、傳入
值, 沒有大括號{},compiler會把此種形式當成是函數宣告;如果加上了
{}, 形成函數定義。所以你要宣告一個函數,只須 鍵入 int f();,extern可
加 可不加,compiler會自動把它示為函數宣告。
理論上不管是指標或陣列,均是一個變數,只是它們所存的內容不是一般的數值或字元,而是位址。因此當然可以用extern宣告去使用它們。
所謂的extern宣告,就是說在目前的程式檔中,並不存在這個變數,而是存在另外的檔案中,因此如果要在目前的檔案中引用外部的變數,就可以透過extern將要引用的變數在目前檔案中作宣告,當然有一個前提:就是要引用的外部變數,必須能看得到,也就是說它必須是一個global形式的變數,以確保能存取到該變數,等到程式Link時,就能將它們連結起來,相互為用。
没有评论:
发表评论