C語言extern關鍵字用法和理解

2021-09-26 04:36:50 字數 1534 閱讀 3127

例如:extern int a;

顯式的說明了a的儲存空間是在程式的其他地方分配的,在檔案中其他位置或者其他檔案中尋找a這個變數。

例如a.c檔案中定義int a = 5和乙個函式,在a.h裡寫extern int a;,如果要在其他檔案裡呼叫a這個變數和函式,直接#include即可。如下圖

只能引用另外乙個.c檔案裡的變數或者函式,不能引用.**件裡的變數,當然,也非常不建議在.**件裡定義變數。因為在.**件裡定義變數,如果這個.**件被多個.c檔案包含則會報重複定義的錯誤,文章末尾詳講。

例1:在a.**件中定義乙個變數,在b.c檔案中引用,會報錯,未定義這個變數

例2:在a.c檔案中定義乙個變數,在b.c檔案中引用,成功呼叫

例1:在a.**件中使用extern int a = 5定義乙個變數,在b.c檔案中引用,會報warning,但程式可以執行

引用變數是一樣的,如果需要呼叫其他.c檔案中的函式,在檔案中的函式宣告前加extern即可,不加extern而直接宣告函式也可以,因為宣告全域性函式預設前面帶有extern。見下面例子

例1:a.c中定義乙個fun函式,b.c中要引用這個函式,b.c中的宣告extern int fun(); 與int fun();沒有任何區別,如下兩個圖

static 表示靜態的變數,限制此變數作用域在乙個原始檔內,其他檔案不能用extern來引用此變數,不僅適用於變數,函式也可以。如下圖例子,b.c檔案就不能引用a.c檔案裡的靜態變數ckx。

include相當於把include .**件直接帶入到本原始檔裡,比如在b.c檔案裡include "a.h",就相當於把a.**件裡所有定義的變數和函式全部拷貝了乙份放入了b.c裡,乙個專案裡,乙個.**件可能會被多個.c原始檔包含,這樣編譯的時候就會報重複定義的錯誤。而且盡量不要在.h裡定義變數,這是乙個不好的習慣。

例子:在a.h裡定義乙個變數,a.c和b.c都包含這個.**件,編譯的時候就會報錯。

extern 關鍵字用法

overrides public virtual bool initinstance extern 摘自 extern lpdirectdraw4 lpdd 宣告lpdd,但是不分配記憶體,只說明他是你可以用的變數,在此程式之外其他的程式中已經聲名了他。其實他就是防止名字衝突 extern 申明本地...

C語言中的extern關鍵字用法

在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在 別處定義的 要在此處引用 1.extern修飾變數的宣告。舉例來說,如果 檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v...

C語言中的 extern關鍵字用法

我們知道,程式的編譯單位是源程式檔案,乙個原始檔可以包含乙個或若干個函式。在函式內定義的變數是區域性變數,而在函式之外定義的變數則稱為外部變數,外部變數也就是我們所講的全域性變數。它的儲存方式為靜態儲存,其生存週期為整個程式的生存週期。全域性變數可以為本檔案中的其他函式所共用,它的有效範圍為從定義變...