變量的申明與定義

今天突然想到一個問題:在頭文件(.h)文件中定義的變量 int a=13 爲什麼在其他的地方不能使用extern申明之後直接使用呢,這樣不就可以避免include“.h”這種笨拙的方式了嗎。網上查找了很多資料,都是衆說紛紜。但是從這些博客中可以得出這麼一個結論:在頭文件中只能申明變量,而無法定義變量。變量的定義需要在源文件(.cpp)中進行。變量的申明和定義最大的區別在於是否存在內存的分配。

但是這又使我又陷入另一個問題的思考中:在頭文件中int a=12這種寫法只是簡單的申明一個變量嗎,這裏對變量賦值了,應該存在着內存的分配啊。後來自己寫example測底證實了頭文件中只存在着變量的定義,無變量的申明這一結論。


證實方式:

1.大家都知道全局變量不能重複定義,但是可以重複申明。 在1.h中寫上 int a=12,在2.cpp中寫上int a=13 編譯正常通過。輸出a的值爲13.由此可見在源文件1.h中只存在變量的申明,無定義。

2.在1.h中寫上int a=12,在 1.cpp中寫上 #include"1.h",在2.cpp中寫上int a=13 編譯不能通過。提示:變量a的重複定義。 分析其原因:#include“1.h”實質上是將1.h源文件中的代碼複製到1.cpp中,由於代碼複製之後使得 1.cpp中存在int a=12語句,故變量a在1.cpp中被定義了;而2.cpp中也存在int a=13語句使得變量a被重複定義。


以上結論也能說明爲什麼在頭文件中需要 #ifdef #endif 等條件編譯語句,目的就在於避免變量的重複定義。一旦該頭文件被某個源文件包含之後,該頭文件中申明的變量就在該源文件中被定義;如果該頭文件被幾個源文件包含,則該頭文件中申明的變量就有重複定義的風險了。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章