程式的編譯單位是源程式檔案,乙個原始檔可以包含乙個或若干個函式。
函式內定義的變數是區域性變數,而在函式之外定義的變數則稱為外部變數,外部變數也就是全域性變數。它的儲存方式為靜態儲存,其生存週期為整個程式的生存週期。
全域性變數可以為本檔案中的其他函式所共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。
然而,如果全域性變數不在檔案的開頭定義,有效的作用範圍將只限於其定義處到檔案結束。如果在定義點之前的函式想引用該全域性變數,則應該在引用之前用關鍵字 extern 對該變數作「外部變數宣告」,表示該變數是乙個已經定義的外部變數
。有了此宣告,就可以從「宣告」處起,合法地使用該外部變數。
來看乙個簡單的例子:
#include int max(int x,int y);
int main(void)
/*在後面 定義兩個全域性變數*/
int g_x = 10;
int g_y = 20;
int max(int x, int y)
**中,全域性變數 g_x 與 g_y 是在 main 函式之後宣告
的,因此它的作用範圍不在 main 函式中
。如果我們需要在 main 函式中呼叫它們,就必須使用 extern
來對變數 g_x 與 g_y 作「外部變數宣告」,以擴充套件全域性變數的作用域。也就是說,如果在變數定義之前要使用該變數,則應在使用之前加 extern 宣告變數,使作用域擴充套件到從宣告開始到本檔案結束。
如果整個工程由多個原始檔組成,在乙個原始檔中想引用另外乙個原始檔中已經定義的外部變數,同樣只需在引用變數的檔案中用 extern 關鍵字加以宣告即可。下面就來看乙個多檔案的示例:
/****max.c****/
#include /*外部變數宣告*/
extern int g_x ;
extern int g_y ;
int max()
/***main.c****/
#include /*定義兩個全域性變數*/
int g_x=10;
int g_y=20;
int max();
int main(void)
執行結果為:the max value is 20
對於多個檔案的工程,都可以採用上面這種方法來操作。對於模組化的程式檔案,可在其檔案中預先留好外部變數的介面,也就是只採用 extern 宣告變數
,而不定義變數
,max.c 檔案中的 g_x 與 g_y 就是如此操作的。
通常,這些外部變數的介面都是在模組程式的標頭檔案中宣告的,當需要使用該模組時,只需要在使用時具體定義一下這些外部變數即可
。main.c 裡的 g_x 與 g_y 則是相關示例。
不過,需要特別注意的是,由於用 extern 引用外部變數,可以在引用的模組內修改其變數的值,因此,如果有多個檔案同時要對應用的變數進行操作,而且可能會修改該變數,那就會影響其他模組的使用。因此,我們要慎重使用。
extern關鍵字講解
基本解釋 extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告 e...
extern關鍵字總結
關於extern關鍵字總結 1.extern的變數的原先定義的地方不能有static修飾 2.如果宣告是const int,那麼extern也必須是extern const int 3.兩個.cpp檔案不能定義同乙個變數名 4.標頭檔案基本可以說是不能定義變數的,否則只要有多個cpp檔案包含了該標頭...
關鍵字 extern 使用
在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在別處定義的,要在此處引用 1.extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。能夠被其他模組以extern修飾符引...