我的博客列表

2012年5月28日星期一

C++中的extern用法

C++有二個基本的原則:

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()
{
;
}

改成這種形式,就可以順利compiling過。
這兒有幾點注意的事項:
1.C++ 中只允許變數或函數的定義出現一次。由於變數只有定義規則,沒
   有宣告規則,所以當你鍵入int a;時,代表此變數已經被定義了。我們如
   何宣告一個變數呢?加上extern 變成exern int a;,告訴comipler,此變數a只
   是一個宣告,它的定義在別處。

2.函數規則分成宣告與定義二種。當一個函數只有傳回值、名稱、傳入 
   值, 沒有大括號{},compiler會把此種形式當成是函數宣告;如果加上了 
   {}, 形成函數定義。所以你要宣告一個函數,只須 鍵入 int f();,extern可
   加 可不加,compiler會自動把它示為函數宣告。

理論上不管是指標或陣列,均是一個變數,只是它們所存的內容不是一般的數值或字元,而是位址。因此當然可以用extern宣告去使用它們。
所謂的extern宣告,就是說在目前的程式檔中,並不存在這個變數,而是存在另外的檔案中,因此如果要在目前的檔案中引用外部的變數,就可以透過extern將要引用的變數在目前檔案中作宣告,當然有一個前提:就是要引用的外部變數,必須能看得到,也就是說它必須是一個global形式的變數,以確保能存取到該變數,等到程式Link時,就能將它們連結起來,相互為用。

没有评论:

发表评论