1 基本解釋
extern可以置於變數或者函數前,以標示變數或者函數的定義在別的檔案中,提示編譯器遇到此變數和函數時在其他模組中尋找其定義。
另外,extern也可用來進行連結指定。
2 問題:extern 變數
在一個源檔案裡定義了一個數組:
char a[6];
在另外一個檔案裡用下列語句進行了聲明:
extern char *a;
請問,這樣可以嗎?
答案與分析:
1)、不可以,程式運行時會告訴你非法訪問。原因在於,指向類型T的指標並不等價於類型T的數組。extern char *a聲明的是一個指標變數而不是字元數組,因此與實際的定義不同,從而造成運行時非法訪問。應該將聲明改為extern char a[ ]。
2)、例子分析如下,如果a[] = "abcd",則外部變數a=0x61626364 (abcd的ASCII碼值),*a顯然沒有意義,如:
[img]http://www.yesky.com/image20010518/175021.gif[/img]
顯然a指向的空間(0x61626364)沒有意義,易出現非法記憶體訪問。
3)、這提示我們,在使用extern時候要嚴格對應聲明時的格式,在實際編程中,這樣的錯誤屢見不鮮。
4)、extern用在變數聲明中常常有這樣一個作用,你在*.c檔案中聲明了一個全域的變數,這個全域的變數如果要被引用,就放在*.h中並用extern來聲明。
3 問題:extern 函數1
常常見extern放在函數的前面成為函式宣告的一部分,那麼,C語言的關鍵字extern在函數的聲明中起什麼作用?
答案與分析:
如果函數的聲明中帶有關鍵字extern,僅僅是暗示這個函數可能在別的源檔案裡定義,沒有其它作用。即下述兩個函式宣告沒有明顯的區別:
extern int f(); 和int f();
當然,這樣的用處還是有的,就是在程式中取代include “*.h”來聲明函數,在一些複雜的項目中,我比較習慣在所有的函式宣告前添加extern修飾。
本文來自: (www.91linux.com) 詳細出處參考:http://www.91linux.com/html/article/program/cpp/20071213/9069.html