C語言學習及應用筆記之六:C語言extern關鍵字及其使用
在C語言中,修飾符extern用在變數或者函式的宣告前,用來以標識變數或者函式的定義在別的檔案中,提示編譯器遇到此變數或者函式時,在其它檔案中尋找其定義。extern關鍵字的用法有幾種,我們下面對其進行說明。
(1)extern修飾變數的宣告
extern關鍵字可以用來修飾變數,表示該變數在別的檔案中已有宣告。例如:我們在檔案file1.c中聲明瞭變數int var,然後我們又需要再file2.c中使用該變數,則可在檔案file2.c中宣告extern int var,就可在檔案file2.c中使用該變量了。
佷顯然使用extern關鍵字修飾的變數都是全域性變數,因為在其它檔案中引用區域性變數是不會有意義的,也超出了局部變數的作用域。
說到作用域,我們需要說明,儘管使用extern關鍵字修飾的變數,其原本都是全域性變數,但如果extern int var宣告處於某一函式體內,那麼其作用域就在函式體內。這其實與一般變數的作用域是相同的。
(2)extern修飾函式宣告
從本質上來講,使用extern關鍵字函式和變數沒有什麼區別。如果我們在檔案file1.c中定義有函式void fun(int var),而我們在檔案file2.c中想要應用,那麼我們可以在file2.c中宣告extern void fun(int var),而使用則與在file1.c中並無區別。
當然,應用其它檔案中的函式,更常用的方式是引用相應的標頭檔案。那麼使用extern關鍵字與直接引用標頭檔案有什麼不同呢?首先來講,引用標頭檔案是一種預處理,而extern宣告則應該是連結層面的實現。其次,對於大批量引用自然是使用標頭檔案比較方便,但如果我們只是使用個別函式,當然還是使用extern更為直接。
(3)extern用來進行連結指定
extern用來進行連結指定一般用於混合程式設計,如果我們要在C++程式中呼叫C程式碼,則我們就需要使用extern “C”來宣告,這樣聯結器就會使用C的規範來連結這部分程式碼。
(4) extern與static
從某種意義上來說,extern關鍵字與static關鍵字是相反的,extern關鍵字是宣告想要呼叫的外部變數和函式。而static關鍵字正好宣告為自己使用。當然使用static關鍵字宣告一個變數時,同時也定義了該變數。而extern宣告一個變數時,僅是宣告,因為該變數早已在其他地方定義。
歡迎關注: