C語言中extern的用法

2022-07-16 22:39:24 字數 1447 閱讀 4751

extern用在變數或函式的宣告前,用來說明「此變數/函式是在別處定義的,要在此處引用」。

extern修飾變數的宣告。

鏈結(external)的,也就是說a.c要引用到變數v,不只是取決於在a.c中宣告extern int v,還取決於變數v本身是能夠被引用到。這裡涉及到另外乙個話

題---變數的作用域。能夠被其他模組以extern引用到的變數通常是全域性變數。

extern int v可以放在a.c中的任何地方,比如可以在a.c中函式func()定義的開頭處宣告extern int v,然後就可以引用到變數v了,

只不過這樣只能在func()作用域中引用變數v。

另外一點要說明的是在b.c中需要對int v 做什麼處理嗎?那就是不能定義成靜態變數static int v,否則不能使用。

fileb.c

static int a;

int main()

filea.c

extern a;

a = a*n; //出錯

另外有人會有疑問為什麼不在b.v檔案中宣告extern a;這樣可以表示出a的特殊性,仔細想想真的不需要。

extern修飾函式的宣告。

本質上講,變數和函式沒有區別。函式名是指向函式二進位制塊開頭處的指標。如果檔案a.c要引用b.c中的函式,比如在b.c中原型是int func(int m),那麼就可以在a.c中宣告extern int func(int m),然後就能使用func()來做任何事情。就像變數的宣告一樣,extern int func(int m)可以放在a.c中的任何位置,而不一定非要放在a.c的檔案作用域的範圍中,

對其他模組中函式的引用,最常用的方法是包含這些函式宣告的標頭檔案。使用extern和包含標頭檔案來引用函式的區別:extern的引用方式比包含標頭檔案要間接得多。extern的使用方法是直接了當的,想引用哪個函式就用extern宣告哪個函式。這大概是kiss原則的一種體現。這樣做的乙個明顯的好處是,會加速程式的編譯(確切地說是預處理)的過程,節省時間。在大型c程式編譯過程中,這種差異是非常明顯的。

此外,extern修飾符可用於指示c或者c++函式的呼叫規範。比如在c++中呼叫c庫函式,就需要在c++程式中用extern "c"宣告要引用的函式。這是給鏈結器使用的,告訴鏈結器在鏈結的時候用c函式規範來鏈結。主要原因是c++和c程式編譯完成後再目標**中命名規則不同。

0x05

簡要例子:

1 #include 2 #include 3 

4 int x = 0;

5 int y = 5;

6 int func1()

7 12

13 int p = 8;

14 int q = 10;

15 int main()

16

輸出結果:

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