extern關鍵字主要修飾變數或函式,表示該函式可以跨檔案訪問,或者表明該變數在其他檔案定義,在此處引用。
1.extern修飾變數
(1)如果某變數int m在a.c中定義宣告,則其他b.c檔案訪問時,需要用extern宣告該變數才可以。
注意extern的嚴格宣告,如在乙個檔案中宣告char a = "abcd";另乙個檔案如果訪問需宣告extern char a,而不能是extern char *a;
(2)如果在*.h中宣告,其他檔案使用時,則只需要包含標頭檔案即可,無需再宣告,建議只在標頭檔案中宣告就好了。
注意:extern可以宣告無數次,但只能定義一次,否則會出現鏈結錯誤。另外能夠被其他模組以extern修飾符引用到的變數通常是全域性變數,extern int m可以放在b.c中的任何地方,如果放在**塊內,則b.c中訪問m的區域就只能限於**塊內。
(3)如果乙個變數宣告於**塊內部,在它前面新增extern表示引用的是全域性變數而不是區域性變數。
2.extern修飾函式(不用"c"修飾)
extern修飾函式和變數沒有區別,只需extern宣告後,即可用於該檔案中各個位置。對其他模組中函式的引用,最常用的方法是包含這些函式宣告的標頭檔案,在程式中取代include 「*.h」來宣告函式。
一般呼叫方式如下:首先在標頭檔案extern 修飾宣告函式,包含該標頭檔案在對應的c檔案中實現該函式,c語言中其他檔案使用時可以直接呼叫,也可用extern宣告該函式後使用,但c++必須宣告後才能使用。建議宣告後使用。
使用extern和包含標頭檔案來引用函式有什麼區別呢?
extern的引用方式比包含標頭檔案要簡潔得多!extern的使用方法是直接了當的,想引用哪個函式就用extern宣告哪個函式。這樣做的乙個明顯的好處是,會加速程式的編譯(確切的說是預處理)的過程,節省時間。在大型c程式編譯過程中,這種差異是非常明顯的。
3.extern用於c\c++相互呼叫
extern修飾函式時可以新增"c",從而實現c\c++相互呼叫。
(1)c呼叫c++
c++標頭檔案中函式前用extern "c"修飾宣告,在對應的cpp檔案中實現該函式時需注意函式介面不能使用vector或string等c++專有特性,否則c中無法使用
一般呼叫方式如下:首先在c++標頭檔案extern "c"修飾宣告函式,包含該標頭檔案在對應的cpp檔案中實現該函式,使用時可以和普通extern宣告函式一樣使用,在c語言中,只能指定為extern型別,c語言中不支援extern"c"宣告。
(2)c++呼叫c
c++語言在編譯的時候為了解決函式的多型問題,會將函式名和引數聯合起來生成乙個中間的函式名稱,而c語言則不會,因此會造成鏈結時找不到對應函式的情況,此時c函式就需要用extern 「c」進行鏈結指定,這告訴編譯器,請保持我的名稱,不要生成用於鏈結的中間函式名。
一般呼叫格式有兩種,第一種在c語言標頭檔案中用extern"c"宣告:
exte.h
1#ifdef __cplusplus
2extern"c
"9#endif
exte.c
1 #include "exte.h
"2 #include 3
void
mytest()
main.cpp
1 #include2//#include "exte.h"
3extern"c
"void mytest();//
和上面的語句二選一即可,如果函式太多,一般用上面包含標頭檔案的方法
4int
main()
第二種是在cpp檔案呼叫時,通過extern"c"包含c語言標頭檔案
exte.h
1void mytest();
exte.c
1void
mytest()
main.cpp
1 #include23extern"c
"67 //extern"c
"void
mytest();89
intmain()
其中第二種,可以去掉include標頭檔案,呼叫時extern "c" void mytest();即可。
綜上,可以在標頭檔案中宣告,也可以呼叫時宣告。至於是否需要標頭檔案,根據實際需要決定。
c c 關鍵字,相互呼叫
一 函式過載 在同乙個作用域中,如果有多個函式的名字相同,同乙個作用域,但是形參列表不同 引數型別不同或引數個數不同 返回值型別可同也可不同,我們稱之為過載函式。過載的函式是通過形參列表區分的,與返回值型別無關。函式過載其實是 乙個名字,多種用法 的思想,不僅函式可以過載,函式過載就是重定義 覆蓋是...
C C 中extern關鍵字
extern關鍵字可置於變數或者函式前,以表示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數或函式時,在其它模組中尋找其定義。另外,extern也可用來進行鏈結指定。在介紹外部變數之前,先來看一下什麼是區域性變數。下面是乙個例子。include define maxline 1000 int ...
C C 的extern關鍵字
比如這是我的myextern.cpp檔案,只有一行 int ex 3 然後這是我的main.cpp include using namespace std intmain 如果我在main中加extern關鍵字 include using namespace std intmain 也就是說在沒有用...