extern關鍵字解析

2022-06-07 12:42:08 字數 1565 閱讀 4410

程式的編譯單位是源程式檔案,乙個原始檔可以包含乙個或若干個函式。

函式內定義的變數是區域性變數,而在函式之外定義的變數則稱為外部變數,外部變數也就是全域性變數。它的儲存方式為靜態儲存,其生存週期為整個程式的生存週期。

全域性變數可以為本檔案中的其他函式所共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。

然而,如果全域性變數不在檔案的開頭定義,有效的作用範圍將只限於其定義處到檔案結束。如果在定義點之前的函式想引用該全域性變數,則應該在引用之前用關鍵字 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修飾符引...