我們知道,程式的編譯單位是源程式檔案,乙個原始檔可以包含乙個或若干個函式。
在函式內定義的變數是區域性變數,而在函式之外定義的變數則稱為外部變數,外部變數也就是我們所講的全域性變數。它的儲存方式為靜態儲存,其生存週期為整個程式的生存週期。全域性變數可以為本檔案中的其他函式所共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。
然而,如果全域性變數不在檔案的開頭定義,有效的作用範圍將只限於其定義處到檔案結束。
如果在定義點之前的函式想引用該全域性變數,則應該在引用之前用關鍵字 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 則是相關示例。
c語言中extern關鍵字
extern關鍵字適用於變數及函式,並且擴充套件了他們的可見性,這也就是它被命名為extern的原因。首先介紹一下宣告 declaration 和定義 definition 的區別 乙個變數或者函式可以宣告任意次數,但只能定義一次。當我們在宣告或定義函式時,會隱藏extern關鍵字。例如,當我們定義...
C語言中extern關鍵字詳解
內容清單 1.用extern宣告外部變數 1 在乙個檔案內宣告的外部變數 2 在多個檔案中宣告外部變數 3 在多個檔案中宣告外部結構體變數 2.用extern宣告外部函式 3.總結 1 用extern宣告外部變數 定義 外部變數是指在函式或者檔案外部定義的全域性變數。外部變數定義必須在所有的函式之外...
C語言中extern關鍵字詳解
內容清單 1.用extern宣告外部變數 1 在乙個檔案內宣告的外部變數 2 在多個檔案中宣告外部變數 3 在多個檔案中宣告外部結構體變數 2.用extern宣告外部函式 3.總結 1 用extern宣告外部變數 定義 外部變數是指在函式或者檔案外部定義的全域性變數。外部變數定義必須在所有的函式之外...