1. 程式人生 > >程式設計規則中為何要求不能在.h檔案中定義變數

程式設計規則中為何要求不能在.h檔案中定義變數

問題背景:當你接觸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變數進行操作,實際上操作的並非是同一個變數。