天天看點

C/C++中定義與聲明的差別

     對于初學C或者C++的同學來說很多都分不清變量的定義與聲明的差別,有些同學會說這兩者差別不重要,即使不知道也可以寫出程式,誠然不清楚他倆的差別的确可以寫出程式,他倆的差別可能看起來微不足道,但事實上卻是舉足輕重的。

     C/C++程式很多都是由多個源檔案構成的,為了讓多個檔案通路相同的變量,C/C++差別了聲明和定義。

     變量的定義用于為變量配置設定存儲空間,還可以為變量指定初始值,在一個程式中隻能定義一次,出現多次編譯器會報錯,變量的定義也是聲明,當定義一個變量的時聲明了它的類型和名字

     變量的聲明用于向程式表明變量的類型和名字,當對一個變量進行聲明時,編譯器不會為其配置設定記憶體空間。可以通過使用extern關鍵字聲明變量名而不定義它。不定義的變量的聲明包括聲明的對象類型,對象名和關鍵字extern

     例如: extern int i;             //隻對變量進行聲明但是沒有定義

                 int i;                        //聲明并定義了變量i

     如果聲明有初始化式,則該聲明也就是定義,是以判斷是不是聲明,不要單單靠有沒有關鍵字extern,注意帶有extern關鍵字的定義或聲明的對象必須是全局變量,也即必須定義或聲明在函數外部。事實上extern關鍵字隻是說明聲明的變量或函數可能定義到其他源檔案中了(extern的作用遠不止這些)。

     形如:extern   int i=232;   //雖然帶有關鍵字extern,但是有初始化那就是定義,在随後的操作中切忌不能在重複定義了

               extern int i;              //對,因為該語句是聲明,不是定義

               int i;                          //錯,因為該語句是定義,由于上面已經定義過了

               extern   int i=100;    //錯,因為已經上面已經定義過了

     怎麼樣?看着上面的解釋是不是還是有點迷茫啊,沒關系,我再來總結一下

     無論怎麼樣你一定要記住

     (1)定義在整個程式中隻能有一次,定義的同時會為變量配置設定記憶體空間

     (2)判斷聲明的最好方式是看有沒有extern關鍵字,如果有的話再看變量有沒有被指派,沒有被指派的就是聲明,有的話還是定義,是以聲明的形式是:extern  資料類型  變量名;