extern的用法C語言
『壹』 c語言中,extern關鍵字怎麼使用最好解釋清楚一點。
extern可以置於變數或者函數前,以表示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義。
現代編譯器一般採用按文件編譯的方式,因此在編譯時,各個文件中定義的全局變數是互相透明的,也就是說,在編譯時,全局變數的可見域限制在文件內部。
如果你定義A.cpp和B.cpp中都定義了全局變數i。那麼分別編譯,都可以通過,但是鏈接時就會報錯。
B.obj : error LNK2005: "int i" (?i@@3HA) already defined in A.obj
反之,如果我們希望A.cpp和B.cpp中使用的i是同一個i。也就是兩個文件,共同使用同一個全局變數。如果我們不在B.cpp中定義i。那麼編譯時就會報錯,提示
error C2065: 'i' : undeclared identifier
如果我們定義i就會出現上面所說的錯誤。
於是,我們需要extern關鍵字。告訴編譯器。這個i我們在別的模塊中定義過了。你要編譯的話,取別的模塊找一找。這樣程序就能夠自動去A.cpp中尋找i的定義。並且讓它在B.cpp中可以被使用。
『貳』 C語言 extern
在C語言中,變數和函數都有數據類型和存儲類型兩個屬性,因此變數定義的一般形式是 {存儲類型 數據類型 變數名}
C語言種提供了以下四種不同的存儲類型
那麼我們所說的extern就是存儲類型的一種。extern修飾的變數存儲位置在全局靜態存儲區。
標準的定義格式: extern 類型名 變數名;
通俗來說,如果使用extern修飾了一個變數或者函數,那麼這個函數或者變數就變成了全局變數,在除定義該變數or函數的文件外仍然有效。不過需要注意的是,使用extern進行修飾是對該變數or函數進行聲明,並沒有分配內存。
如果在a.c中需要引用b.c中的int i,那麼可以在a.c中使用extern int i進行聲明。並且,能夠被其他模塊以extern修飾符引用的變數通常是全局變數。並且extern int i可以被放在a.c中的任何位置,區別只是在a.c中作用域的問題。
從本質上來說,並沒有什麼區別。函數名字本質上是一個指向二進制塊開頭處的指針。如果a.c中需要引用b.c中的函數,如b.c中原型是int fun(int mu),那麼在a.c中聲明extern int fun(int mu)那麼就可以在a.c中用fun做事。
但是對其他模塊中函數的引用,最常用的方法是包含這些函數聲明的頭文件。
那麼使用extern和包含頭文件來引用函數有什麼區別如下:
① 使用extern的引用比包含頭文件要簡介的多。extern使用直截了當,引用哪個函數直接extern進行聲明即可。這樣做的一個明顯的好處是,會加速程序的編譯(確切的說是預處理)的過程,節省時間。在大型C程序編譯過程中,這種差異是非常明顯的。
② include本質上是把include進來的這個文件原封不動的搬到當前文件中
a.c
b.c
『叄』 extern在c語言中是什麼意思
extern關鍵字可以置於變數或者函數前,以標示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義。這里起到的是聲明作用范圍的用處。
extern的另外用法是當C和C++混合編程時假如c++調用的是c源文檔定義的函數或變數,那麼要加extern來告訴編譯器用c方式命名函數:
文檔A.cpp調用a.c裡面的變數i和函數callme()

相關內容:
C語言包含的各種控制語句僅有9種,關鍵字也只有32個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。
實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。
『肆』 extern在c語言中是什麼意思
是一個修飾符。
在C語言中,修飾符extern用在變數或者函數的聲明前,用來說明「此變數/函數是在別處定義的,要在此處引用」。
extern可置於變數或者函數前,以表示變數或者函數的定義在別的文件中,提示編譯器遇到此變數或函數時,在其它模塊中尋找其定義。另外,extern也可用來進行鏈接指定。

『伍』 c語言中的extern怎麼用
extern在c中就是個外部申明,因為C是先申明再使用,當你想調用的變數或者函數不在你的模塊當中,你可以使用外部申明。在使用外部申明的時候要特別注意,因為這只是個申明,並不是實體,當出現聲明和實體不符的時候,編譯器是不會管的,鏈接後就可能出現錯誤。比如你的實體是 int sample( int x ) ;而你在申明的時候是extern int sample( void ) ; 所以我不喜歡這種方式去聲明。特別是多個人合作項目的時候,這種方法往往導致的結果很難去debug。即使是別人寫好提供給你的,那他在修改了函數或者變數的類型,參數,往往會忘記修改給你的申明。
extern 還有個作用就是當你C和C++混用的時候,比如在C++中要使用C, 那麼就要告訴編譯器,你這段代碼使用的是C,需要用C的編譯器去編譯,那可以使用extern "C" { .........} 否則編譯會有問題
『陸』 c語言extern的用法
extern一般用於跨文件的全局變數上。
如果只是想在函數內部給a賦值,完全不需要用到extern。傳遞引用就可以了。
例如
main()
{
int
a;
num(a);
printf("%d",
a);
}
int
num(int
&b)
{
b
=
3;
}
或者傳遞指針,或者使用返回值
『柒』 C語言的extern用法
int iExtern = 0;
int main()
{
extern int iExtern;
printf("%d\n", iExtern);
return 0;
}
『捌』 c語言中的extern是什麼,有什麼作用啊
extern關鍵字可以置於變數或者函數前,以標示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義。這里起到的是聲明作用范圍的用處。
extern的另外用法是當C和C++混合編程時假如c++調用的是c源文檔定義的函數或變數,那麼要加extern來告訴編譯器用c方式命名函數:
文檔A.cpp調用a.c裡面的變數i和函數callme()

添加了extern 「C」鏈接指示後,上面的代碼就能夠正常運行了。
『玖』 C語言中 extern 的用法,最好有示例,概念少說點
你好!
extern
用於擴展定義的全局變數的作用域,一般定義的全局變數的作用域為定義的位置起到函數結束,當要在定義全局變數的位置之前或其他源文件中引用該全局變數時,就需要在使用的函數中或源文件中用extern來擴展該全局變數的作用域,如:
#include
main()
{int
num(int
x);
int
b=3,c;
c=num(b);
printf("%d",c);
}
int
num(int
x)
{extern
int
a;
int
y;
y=a+x;
return
y;
}
int
a=2;
另外同理如果在定義函數時,在函數的首部的最左端加extern,則此函數是外部函數,可供其它文件調用。
如果對你有幫助,望採納。
『拾』 C語言 函數聲明前extern的用法
個人看法,僅供參考。
(1)別的就是指「這一個」以外的;C盤定義,D盤調用,原則上可以,但是麻煩,寫程序應該越簡單越好,不提倡這樣做;「別的」原則上沒有限定幾層,但是最好放在同一個文件夾,原因也說了,分開放麻煩。
(2)作用相同,不完全等價。區別在哪呢?include 「*.h」
int f();把「*.h」里的所有東西都搬過來(除了f()之外可能還有其他的),那麼肯定包含有f();而extern int f();表示你明確知道你要調用的是「*.h」里的f()這個函數,其它你都不需要。
「這么說,如果所有外部函數聲明時都加上extern就不需要include 「*.h」頭文件了?」是的,但是你想想,如果你所有外部函數都要用到的話,你自己手動給所有函數加上extern還是直接一個include 「*.h」哪個更方便呢
