說到extern,先理一下檔案作用域的概念,也就是從檔案生成到檔案結束。檔案中定義的,不加static的修飾的全域性變數和函式,預設的作用域都是跨檔案,可以被其他檔案使用,但是需要在其他檔案中宣告。宣告也就是告訴編譯器,這個變數已經定義過,變數的型別,若是函式則告訴編譯器該函式的返回型別,引數等資訊。在檔案中使用其他檔案中定義的變數時,不加宣告就會報錯,這個時候就要用到extern來宣告一下。static修飾的全域性變數和函式不可以被其他檔案使用,只能用於本檔案。
1.extern 修飾變數
extern修飾的變數如果帶了初始化值,則是定義。否則為宣告,編譯器碰到這個變數時就知道這個變數在其他地方定義過,而不會報錯。l
extern int a = 5;//這是定義,extern,表示a可能在其他檔案中用到,等價於 int a = 5;
extern int a;//這是宣告,表示a 已經在其他檔案中定義。
定義引起變數的儲存空間的分配,宣告不會。可以有多個宣告,但只能有乙個定義。
2.extern 修飾函式
extern 修飾函式只是表示該函式可能在其他檔案中使用到,不加extern也可以。在本檔案中定義的函式,如果要在其他檔案中使用時,只需要包含標頭檔案就可以,但 如果不想包含標頭檔案的話。只需要用extern 修飾函式宣告一下就可以了。
3.extern 「c」
extern 「c」 來指明鏈結型別。c++為了解決多型問題,在鏈結的時候會把函式名和引數型別一起生成乙個中間的函式名,而c不會,這會導致鏈結時找不到函式名,用 extern "c"來告訴編譯器,按照c的方式編譯,不要生成中間的函式名。
extern用法詳解
1 基本解釋 extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告...
extern用法詳解
extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告 extern...
extern用法詳解
1 基本解釋 extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告...