本篇文章介紹的是C/C 中extern關鍵字的用法,其中主要談到修飾變數時的用法,可以參考一下,希望對你有幫助。
1.基本解釋
extern 可以置於變數或函數前,以標示變數或函數的定義在別的檔案中,提示編譯器遇到此變數和函數時在其他模組中尋找其定義。此外,extern 也可以用來連結指定。
extern 有兩個作用:(1) 當它與"C"一起連用時,如:extern “C” void func(int a);則告訴編譯器在編譯func 函數名稱時按著C 的規則去翻譯對應的函數名而不是C 的。關於這一點,或許可以在《深度探索C 物件模型》一書中尋找答案;另外,在Linux 下有一個backtrace 函數可以列印堆疊訊息,可以查看C 翻譯的函數名稱(muduo 庫中有使用這個函數) 。
(2) 當extern 不與「C」 在一起修飾變數或函數時,如在頭檔中:extern int g_Int; 它的作用就是聲明函數或全域變數的作用範圍的關鍵字,其宣告的函數和變數可以在本模組或其他模組中使用,記住它是一個聲明不是定義!
2.當 extern 修飾變數時
正確使用方法是:在 .c 檔案中定義變量,在對應的 .h 檔案中進行宣告。
我們透過是否會為變數來分配記憶體空間來判定是聲明還是定義(嚴格來說,是單純的分配內存,並不包括初始化部分)。那麼 int i; 這句話是聲明還是定義那?它既是聲明,也是定義。如果我們在 test.h 檔案中使用這句話,一旦在其他檔案中定義 i(e.g.1),或者該檔案被重複包含(e.g.2),那麼就會產生重定義的錯誤。
/* e.g.1 以下为3个文件 */ //test.h int i; //test2.h int i; //main.cpp #include "test.h" #include "test2.h" int main() { return 0; }
/* e.g.2 以下为3个文件 */ //test.h int i; //test2.h #include "test.h" //main.cpp #include "test.h" #include "test2.h" int main() { return 0; }
相關教學:C影片教學
以上是在C/C++中如何使用extern關鍵字的詳細內容。更多資訊請關注PHP中文網其他相關文章!