c語言中extern關鍵字

2021-10-10 02:59:22 字數 2080 閱讀 9312

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...