C語言中文網 目錄
首頁 > 編程筆記 > C語言筆記 閱讀:8,047

extern關鍵字,C語言extern關鍵字用法詳解

我們知道,程序的編譯單位是源程序文件,一個源文件可以包含一個或若干個函數。在函數內定義的變量是局部變量,而在函數之外定義的變量則稱為外部變量,外部變量也就是我們所講的全局變量。它的存儲方式為靜態存儲,其生存周期為整個程序的生存周期。全局變量可以為本文件中的其他函數所共用,它的有效范圍為從定義變量的位置開始到本源文件結束。

然而,如果全局變量不在文件的開頭定義,有效的作用范圍將只限于其定義處到文件結束。如果在定義點之前的函數想引用該全局變量,則應該在引用之前用關鍵字 extern 對該變量作“外部變量聲明”,表示該變量是一個已經定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量。

來看一個簡單的例子:
#include <stdio.h>
int max(int x,int y);
int main(void)
{
    int result;
    /*外部變量聲明*/
    extern int g_X;
    extern int g_Y;
    result = max(g_X,g_Y);
    printf("the max value is %d\n",result);
    return 0;
}
/*定義兩個全局變量*/
int g_X = 10;
int g_Y = 20;
int max(int x, int y)
{
    return (x>y ? x : y);
}
代碼中,全局變量 g_X 與 g_Y 是在 main 函數之后聲明的,因此它的作用范圍不在 main 函數中。如果我們需要在 main 函數中調用它們,就必須使用 extern 來對變量 g_X 與 g_Y 作“外部變量聲明”,以擴展全局變量的作用域。也就是說,如果在變量定義之前要使用該變量,則應在使用之前加 extern 聲明變量,使作用域擴展到從聲明開始到本文件結束。

如果整個工程由多個源文件組成,在一個源文件中想引用另外一個源文件中已經定義的外部變量,同樣只需在引用變量的文件中用 extern 關鍵字加以聲明即可。下面就來看一個多文件的示例:
/****max.c****/
#include <stdio.h>
/*外部變量聲明*/
extern int g_X ;
extern int g_Y ;
int max()
{
    return (g_X > g_Y ? g_X : g_Y);
}

/***main.c****/
#include <stdio.h>
/*定義兩個全局變量*/
int g_X=10;
int g_Y=20;
int max();
int main(void)
{
    int result;
    result = max();
    printf("the max value is %d\n",result);
    return 0;
}
運行結果為:
the max value is 20

對于多個文件的工程,都可以采用上面這種方法來操作。對于模塊化的程序文件,可在其文件中預先留好外部變量的接口,也就是只采用 extern 聲明變量,而不定義變量,max.c 文件中的 g_X 與 g_Y 就是如此操作的。

通常,這些外部變量的接口都是在模塊程序的頭文件中聲明的,當需要使用該模塊時,只需要在使用時具體定義一下這些外部變量即可。main.c 里的 g_X 與 g_Y 則是相關示例。

不過,需要特別注意的是,由于用 extern 引用外部變量,可以在引用的模塊內修改其變量的值,因此,如果有多個文件同時要對應用的變量進行操作,而且可能會修改該變量,那就會影響其他模塊的使用。因此,我們要慎重使用。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo