1. 程式人生 > >C/C++多檔案共享全域性變數時,使用extern的規範

C/C++多檔案共享全域性變數時,使用extern的規範

      關鍵字extern用來宣告變數或者函式是一個外部變數或者外部函式,也就是說告訴編譯器是在其他檔案中定義的,編譯的時候不要報錯,在連結的時候按照字串定址可以找到這個變數或者函式。(函式預設是外部型別的,不需要顯示宣告,但是變數必須,如果想把一個函式宣告為只在本檔案範圍有效,那麼可以用static來說明)

      在某個標頭檔案,比如A.h中定義了全域性變數比如int a;,那麼在其他檔案中的函式呼叫變數a的時候需要在對應標頭檔案或者定義檔案中(保證在使用這個變數前)使用extern int a;來宣告這個變數,但是這樣做有一個弊端,首先如果A.h中集中定義了大量的全域性變數供其他檔案使用,那麼其他的呼叫檔案中會重複的出現大量的extern ***語句,第二,如果其他檔案直接引用A.h,那麼會造成全域性變數的重複定義,編譯不過,等等。為了避免上面的種種問題,總結了下extern的使用規範,內容如下:

      1、在定義檔案中定義全域性變數, 比如A.cpp中定義全域性變數 int a;

      2、在對應的標頭檔案A.h中宣告外部變數 extern int a;

      3、在引用a變數的檔案中包含A.h;

補充:

1. extern這個關鍵字比較蛋疼,在宣告的時候,extern居然可以被省略,所以會讓你搞不清楚到底是宣告還是定義。

    extern int a; // 宣告a

    int a; // 可能是宣告也可能是定義

    int a = 0; // 定義a並賦初值

2. 絕對不要在標頭檔案中定義變數,否則極易引起錯誤,#ifndef ... #define ... #endif 會幫助你防止標頭檔案重複包含,避免編譯錯誤。

    但如果多個.C檔案引用這個變數,則會引起連結錯誤(如:multiple definition of `a')。