C語言關鍵字之extern

2021-09-12 05:01:38 字數 3042 閱讀 3831

目錄

1.extern對變數的宣告

1.1在標頭檔案中宣告為全域性變數

1.2在main.c檔案中呼叫變數a之前將a宣告為全域性變數

1.3定義時直接宣告為全域性變數

2.extern對函式的宣告

2.1在標頭檔案中宣告為全域性函式

2.2在.c檔案中呼叫之前將函式宣告為全域性函式

2.3定義時直接宣告為全域性變數

總結:extern譯為「外面的,外部的」,在c語言中用來宣告乙個變數為外部變數,也叫全域性變數;或者宣告乙個函式在外部進行了定義。也就是說,用extern修飾的變數或函式在同一工程下的其他檔案也可以進行呼叫。

下面用具體的例子說明extern的用法。

假設在test.c檔案中定義了乙個變數a,如果在mian.c檔案中想呼叫它,那麼有三種方式:①將變數a在test.h標頭檔案中宣告為全域性變數;②在main.c檔案中呼叫變數a之前將a宣告為全域性變數;③變數a在test.c定義時直接宣告為全域性變數。

test.h

#ifndef __test_h__

#define __test_h__

extern a;//宣告變數在外部進行了定義

#endif

test.c

#include #include "test.h"

int a=10;//定義變數,並進行賦值

mian.c

#include #include "test.h"//一定要包含標頭檔案才可以使用全域性變數a

int main()

輸出結果:

test.c

#include //#include "test.h"//將.**件遮蔽掉

int a=10;//定義變數,並進行賦值

mian.c

#include //#include "test.h"//遮蔽掉標頭檔案

extern int a;//宣告外部變數

int main()

輸出結果:兩種方法從結果看都對,事實上,兩種方法本質是一樣的,第一種main.c包含了test.h標頭檔案,而test.h標頭檔案中進行了外部宣告,也就相當於間接在main.c中進行了外部宣告;第二種直接在main.c中進行了宣告。

test.c

#include //#include "test.h"//將.**件遮蔽掉

extern int a=10;//定義變數,並進行賦值,並宣告為全域性變數

mian.c

#include //#include "test.h"//遮蔽掉標頭檔案

//extern int a;//遮蔽掉,不做外部宣告

int main()

輸出結果:以上三種方式都可以正確定義宣告乙個全域性變數。但是注意,①像第3中方法這種定義時直接宣告的情況只能用在.c檔案中,不能用在.h標頭檔案中,否則編譯會報錯;②不可以只在.h標頭檔案宣告外部變數,而在外部.c檔案中不對變數進行定義,這樣也會報錯;③不可以在.h標頭檔案中進行定義變數,.h標頭檔案只能進行宣告。

假設在test.c檔案中定義了乙個求和函式sum(int a,int b),如果在mian.c檔案中想呼叫它,那麼有兩種方式:①將求和函式sum(int a,int b)在test.h標頭檔案中宣告為全域性變數;②在main.c檔案中呼叫求和函式sum(int a,int b)之前將求和函式sum(int a,int b)宣告為全域性變數;③求和函式sum(int a,int b)在test.c定義時直接宣告為全域性變數。

test.h

#ifndef __test_h__

#define __test_h__

extern int sum(int a,int b);//宣告函式在外部進行了定義

#endif

test.c

#include #include "test.h"

int sum(int a,int b)//求和函式,返回a+b之和

mian.c

#include #include "test.h"//載入標頭檔案

int main()

輸出結果:事實上,在.**件中宣告函式時,不用加extern也行,只要呼叫此函式的.c檔案包含test.h標頭檔案即可。

test.c

#include //#include "test.h"//將.**件遮蔽掉

int sum(int a,int b)

main.c

#include //#include "test.h"//遮蔽掉標頭檔案

extern int sum(int a,int b);//在呼叫之前宣告外部函式

int main()

輸出結果:test.c

#include //#include "test.h"//將.**件遮蔽掉

extern int sum(int a,int b)//直接宣告為外部函式

mian.c

#include //#include "test.h"//遮蔽掉標頭檔案

int main()

輸出結果:以上三種方法可以正確宣告定義乙個外部函式。事實上,我在使用vs2010編譯時,在test.c檔案中對求和函式不用extern進行外部宣告,在test.**件中也不做聲明,也是可以編譯執行成功的,但是會出現警告,如下圖:

為了避免可能的錯誤,大家還是規範些**比較好。一般對於全域性變數和函式採用1.1和2.1的方式,這樣**層次清晰,方便理解和除錯。

C 之關鍵字extern

最近看了許多關於extern關鍵字的文章,有一些心得體會,本篇博文綜合了許多文章的內容,不正確的地方還希望大家能夠給予指正!其中先指明乙個誤區 許多人認為標頭檔案只能包含宣告,這其實是不對的!一 首先,讓我們來了解宣告和定義的基本概念。1.1.宣告的概念 大概來講宣告主要是為了支援模組 編譯單元 c...

c語言中extern關鍵字

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

C C 之關鍵字extern

typist akame qixisi excel bloonow extern是計算機語言c c 中乙個關鍵字,可用於變數或函式前 對於使用者,它宣告乙個外部符號,以表示該變數或函式是定義在別的檔案中的外部符號 對於建立者,它用在標頭檔案中的乙個宣告之前或乙個定義之前,顯式說明該符號可以被其他檔案...