在c
語言中,修飾符
extern
用在變數或者函式的宣告前,用來說明
「此變數
/函式是在別處定義的,要在此處引用」。
1. extern
修飾變數的宣告。舉例來說,如果檔案
a.c需要引用
b.c中變數
int v
,就可以在
a.c中宣告
extern int v
,然後就可以引用變數
v。這裡需要注意的是,被引用的變數
v的鏈結屬性必須是外鏈結(
external
)的,也就是說
a.c要引用到
v,不只是取決於在
a.c中宣告
extern int v
,還取決於變數
v本身是能夠被引用到的。這涉及到
c語言的另外乙個話題--變數的作用域。能夠被其他模組以
extern
修飾符引用到的變數通常是全域性變數。還有很重要的一點是,
extern int v
可以放在
a.c中的任何地方,比如你可以在
a.c中的函式
fun定義的開頭處宣告
extern int v
,然後就可以引用到變數
v了,只不過這樣只能在函式
fun作用域中引用
v罷了,這還是變數作用域的問題。對於這一點來說,很多人使用的時候都心存顧慮。好像
extern
宣告只能用於檔案作用域似的。
2. extern
修飾函式宣告。從本質上來講,變數和函式沒有區別。函式名是指向函式二進位制塊開頭處的指標。如果檔案
a.c需要引用
b.c中的函式,比如在
b.c中原型是
int fun(intmu)
,那麼就可以在
a.c中宣告
extern int fun
(int mu
),然後就能使用
fun來做任何事情。就像變數的宣告一樣,
extern intfun
(int mu
)可以放在
a.c中任何地方,而不一定非要放在
a.c的檔案作用域的範圍中。對其他模組中函式的引用,最常用的方法是包含這些函式宣告的標頭檔案。使用
extern
和包含標頭檔案來引用函式有什麼區別呢?
extern
的引用方式比包含標頭檔案要簡潔得多!
extern
的使用方法是直接了當的,想引用哪個函式就用
extern
宣告哪個函式。這大概是
kiss
原則的一種體現吧!這樣做的乙個明顯的好處是,會加速程式的編譯(確切的說是預處理)的過程,節省時間。在大型
c程式編譯過程中,這種差異是非常明顯的。
3. 此外,
extern
修飾符可用於指示c或者
c++函式的呼叫規範。比如在
c++中呼叫
c庫函式,就需要在
c++程式中用
extern 「c」
宣告要引用的函式。這是給鏈結器用的,告訴鏈結器在鏈結的時候用
c函式規範來鏈結。主要原因是
c++和
c程式編譯完成後在目標**中命名規則不同。
C語言中extern的用法
在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在別處定義的,要在此處引用 1.extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v的鏈...
C語言中extern的用法
第一篇 一,static和extern 大工程下我們會碰到很多原始檔。檔案a.c static int i 只在a檔案中用 int j 在工程裡用 static void init 只在a檔案中用 void callme 在工程中用 上面的全域性i變數和init 函式只能用在a.c檔案中,全域性變數...
c語言中的extern用法
test.c include int number 1 int getnum int num int getnum2 int num main.c include extern int getnum int num extern int getnum2 int num extern int numb...