C extern用法總結

2021-08-26 17:59:18 字數 1253 閱讀 6468

在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(int mu),那麼就可以在a.c中宣告extern int fun(int mu),然後就能使用fun來做任何事情。

就像變數的宣告一樣,extern int fun(int mu)可以放在a.c中任何地方,而不一定非要放在a.c的檔案作用域的範圍中。

對其他模組中函式的引用,最常用的方法是包含這些函式宣告的標頭檔案。使用extern和包含標頭檔案來引用函式有什麼區別呢?extern的引用方式比包含標頭檔案要簡潔得多!extern的使用方法是直接了當的,想引用哪個函式就用extern宣告哪個函式。

這樣做的乙個明顯的好處是,會加速程式的編譯(確切的說是預處理)的過程,節省時間。在大型c程式編譯過程中,這種差異是非常明顯的。

3. 此外,extern修飾符可用於指示c或者c++函式的呼叫規範。

比如在c++中呼叫c庫函式,就需要在c++程式中用extern 「c」宣告要引用的函式。

這是給鏈結器用的,告訴鏈結器在鏈結的時候用c函式規範來鏈結。主要原因是c++和c程式編譯完成後在目標**中命名規則不同。

C extern 用法介紹

extern修飾符用於宣告在外部實現的方法。extern 修飾符的常見用法是在使用 interop 服務調入非託管 時與 dllimport 屬性一起使用 在這種情況下,該方法還必須宣告為 static,如下面的示例所示 dllimport mpr.dll public static extern ...

c extern的用法解析

c 語言的建立初衷是 a better c 但是這並不意味著c 中類似c語言的全域性變數和函式所採用的編譯和連線方式與c語言完全相同。作為一種欲與c相容的語言,c 保留了一部分過程式語言的特點 被世人稱為 不徹底地物件導向 因而它可以定義不屬於任何類的全域性變數和函式。但是,c 畢竟是一種物件導向的...

C extern 關鍵字詳解

extern關鍵字的用法有如下幾種 一 引入其它檔案中定義的全域性變數或函式 不能是static修飾的,因為static修飾的變數或函式的作用域只存在於當前檔案 比如 在a.c檔案中定義了乙個全域性變數和函式 int num 5 intfunca 若想在b.c檔案中引用a.c檔案裡的全域性變數與函式...