在 c 和 cpp 檔案中,通過extern關鍵字宣告另乙個 c/cpp 檔案中的變數或函式,可以不包含共同的標頭檔案而直接呼叫;
如:run.c / run.cpp
#include int runvalue=7355608;
void runprint(int value)
main.c / main.cpp
int main(void)
此時兩個檔案是獨立的,沒有包含共同的標頭檔案
輸出
hello,world!
value: 7355608
extern "c" 作為c++的關鍵字使用, 在c中是沒有的
而且 extern "c" 直接宣告 和 extern "c" {} 塊內宣告對於變數和函式是不同的
同樣是兩個獨立的cpp檔案,各不包含相同的標頭檔案
當 extern "c" 直接宣告變數時,作用與 extern 宣告變數效果相同
當 extern "c" 直接宣告函式時,無法取得與extern宣告同樣的效果,在其它原始檔中無法以此種方式使用函式
如run.cpp
#include int runvalue=7355608;
void runprint(int value)
main.cpp
//宣告變數,效果不變
extern "c" int runvalue;
//編譯器報錯
//宣告函式,由於定義在另乙個不互通的檔案中,無法被外部宣告到此處,必須包含其標頭檔案
extern "c" void runprint(void);
int main(void)
使用extern "c" {} 塊宣告變數時,變數必須在塊內也單獨使用extern 宣告(無定義檔案的標頭檔案引用)
如
extern "c"
若不在塊內宣告變數時新增extern關鍵字,則無法通過編譯
使用extern "c" {} 塊宣告函式時,若不包含定義檔案的標頭檔案,則在塊內函式無效,新增extern關鍵字也會編譯出錯
如在塊內使用extern
extern "c"
不在塊內使用extern
extern "c"
不使用 extern "c" 直接宣告或塊內宣告在c/cpp原始檔的變數,而是直接使用extern宣告
用extern單獨宣告可以安全其他檔案中的變數,而不必開放在標頭檔案中(可在區域性內extern宣告而非必需在全域性,被宣告的變數必須是全域性且非const變數)
(若是被定義的const全域性變數需要被其他檔案使用,則必須extern宣告在標頭檔案中並讓呼叫者包含標頭檔案)
extern關鍵字講解
基本解釋 extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告 e...
extern關鍵字總結
關於extern關鍵字總結 1.extern的變數的原先定義的地方不能有static修飾 2.如果宣告是const int,那麼extern也必須是extern const int 3.兩個.cpp檔案不能定義同乙個變數名 4.標頭檔案基本可以說是不能定義變數的,否則只要有多個cpp檔案包含了該標頭...
關鍵字 extern 使用
在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在別處定義的,要在此處引用 1.extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。能夠被其他模組以extern修飾符引...