extern
關鍵字適用於變數及函式,並且擴充套件了他們的可見性,這也就是它被命名為extern
的原因。
首先介紹一下宣告(declaration)和定義(definition)的區別:
乙個變數或者函式可以宣告任意次數,但只能定義一次。
當我們在宣告或定義函式時,會隱藏extern
關鍵字。例如,當我們定義如下函式時:
int
foo(
int arg1,
char arg2)
;
編譯器會將其視為
extern
intfoo
(int arg1,
char arg2)
;
由於extend
關鍵字將函式的可見性擴充套件到整個程式,因此可以在整個程式的任何檔案中呼叫該函式,前提是這些檔案包含該函式的宣告。有了函式的宣告,編譯器就知道函式的定義存在於其他地方,然後繼續編譯檔案。
當我們需要對乙個變數宣告而不定義的時候,我們會用extern
來修飾該變數。如下所示
extern
int var;
這裡宣告了乙個名為var
的整型變數(並沒有定義,也就是說沒有給var分配記憶體)。這個宣告可以進行多次。但是當我們去掉extern
關鍵字後:
int var;
在這一行中,宣告並定義了乙個名為var
的整數型別變數,var被分配記憶體。
因此當我們宣告乙個函式時,extern
關鍵字是隱式的,當我們想宣告而不定義變數時,我們需要顯式的包含extern
關鍵字。此外,由於extern
關鍵字擴充套件了整個程式的可見性,通過對變數使用extern
關鍵字,我們可以在程式中任何地方使用該變數,前提是我們包含了該變數在某個地方的宣告。
接下來用幾個例子來理解extern
關鍵字:
example 1:
int var;
intmain
(void
)
這個程式是可以成功執行的,因為var
變數是全域性變數,並且宣告和定義的。
example 2:
extern
int var;
intmain
(void
)
這個程式也是可以成功執行的,因為這裡雖然只是宣告了var
變數,但是var
變數並沒有實際使用過,所以不會出現問題。
example 3:
extern
int var;
intmain
(void
)
這個程式就會出現問題,會在編譯的時候丟擲錯誤。因為var變數只進行了宣告,並沒有定義(也就是說沒有分配記憶體),程式試圖將不存在的變數的值更改為10。
example 4:
#include
"somefile.h"
extern
int var;
intmain
(void
)
假定somefile.h
包含var
的定義,這個程式是可以成功執行的。
example 5:
extern
int var =0;
intmain
(void
)
如果用extern宣告了var變數,並且對該變數進行初始化,那麼該變數被認為是已定義的。所以該程式可以順利編譯並執行。
總結
C語言中extern關鍵字詳解
內容清單 1.用extern宣告外部變數 1 在乙個檔案內宣告的外部變數 2 在多個檔案中宣告外部變數 3 在多個檔案中宣告外部結構體變數 2.用extern宣告外部函式 3.總結 1 用extern宣告外部變數 定義 外部變數是指在函式或者檔案外部定義的全域性變數。外部變數定義必須在所有的函式之外...
C語言中extern關鍵字詳解
內容清單 1.用extern宣告外部變數 1 在乙個檔案內宣告的外部變數 2 在多個檔案中宣告外部變數 3 在多個檔案中宣告外部結構體變數 2.用extern宣告外部函式 3.總結 1 用extern宣告外部變數 定義 外部變數是指在函式或者檔案外部定義的全域性變數。外部變數定義必須在所有的函式之外...
C語言中的extern關鍵字用法
在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在 別處定義的 要在此處引用 1.extern修飾變數的宣告。舉例來說,如果 檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v...