程式設計規則中為何要求不能在.h檔案中定義變數
阿新 • • 發佈:2018-11-19
問題背景:當你接觸C語言時,老師一定會強調一個程式設計規則:永遠不要在.h檔案中定義變數
疑惑點:是不是說在.h檔案中定義會出錯?
結論:在.h檔案中定義變數不會報錯,但是該操作會導致在多個模組中重複定義該同名變數【變數名相同,但地址不同】,與軟體邏輯不一致。
分析:
1):知識概要
1> 定義變數和宣告變數的區別是定義會產生記憶體的分配,而申明則不會產生記憶體的分配,而是告知編譯器該變數在其他模組中已經定義,連結時需要在其他模組尋找該變數。
2>extern :
3>軟體邏輯的本質:在多個模組中操作同一個變數【即同一個地址上變數】
2):程式碼分析
/* module a.h */
int a =0; /*在a .h檔案中定義變數,並分配了記憶體,則 a 地址:0x00000004*/
/* module b.c */
#include "a.h" /*包含a .h檔案,又定義了a變數,並分配一個地址,則 a 地址:0x00000008*/
/* module c.c */
#include "a.h"/*包含a .h檔案,又定義了a變數,並分配一個地址,則 a 地址:0x0000000C*/
根據上面的地址可以判斷,在.h檔案中定義變數,會導致在多個模組中定義了a變數,且在不同模組中對應不同的地址。雖然在多個模組中對a變數進行操作,實際上操作的並非是同一個變數。