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

2021-09-11 06:45:24 字數 1475 閱讀 4559

extern表明變數或者函式是定義在其他其他檔案中的

例如:extern int a;

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

用法乙個c檔案需要呼叫另乙個c檔案裡的變數或者函式,而不能從.**件中呼叫變數。詳見下文1

extern int a = 5與int a = 5意義是一樣的,都是定義。而extern int a;是宣告。但會產生一條警告。詳見下文2

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

如果不想讓其他.c檔案引用本檔案中的變數,加上static即可。詳見下文4

建議最優用法

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

1.乙個c檔案需要呼叫另乙個c檔案裡的變數或者函式,而不能從.**件中呼叫變數

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

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

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

2.extern int a = 5與int a = 5意義是一樣的,都是定義。而extern int a;是宣告。但會產生一條警告

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

3.引用函式

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

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

4.如果不想讓其他.c檔案引用本檔案中的變數,加上static即可

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

5.extern和include的區別

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

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

C語言關鍵字之extern

目錄 1.extern對變數的宣告 1.1在標頭檔案中宣告為全域性變數 1.2在main.c檔案中呼叫變數a之前將a宣告為全域性變數 1.3定義時直接宣告為全域性變數 2.extern對函式的宣告 2.1在標頭檔案中宣告為全域性函式 2.2在.c檔案中呼叫之前將函式宣告為全域性函式 2.3定義時直接...

c語言中extern關鍵字

extern關鍵字適用於變數及函式,並且擴充套件了他們的可見性,這也就是它被命名為extern的原因。首先介紹一下宣告 declaration 和定義 definition 的區別 乙個變數或者函式可以宣告任意次數,但只能定義一次。當我們在宣告或定義函式時,會隱藏extern關鍵字。例如,當我們定義...

C語言中extern關鍵字詳解

內容清單 1.用extern宣告外部變數 1 在乙個檔案內宣告的外部變數 2 在多個檔案中宣告外部變數 3 在多個檔案中宣告外部結構體變數 2.用extern宣告外部函式 3.總結 1 用extern宣告外部變數 定義 外部變數是指在函式或者檔案外部定義的全域性變數。外部變數定義必須在所有的函式之外...