extern關鍵字及C C 相互呼叫

2022-04-27 16:58:25 字數 2423 閱讀 7604

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

1

void

mytest()

main.cpp

1 #include2

3extern"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 也就是說在沒有用...