頭文件保護符引發的思考

 首先,你應該明白一些結論,因爲這些結論與頭文件密切相關。

 

 

1、在頭文件中,當需要定義一個類型指針(class CName *p)的時候,僅僅需要申明class CName。
2、在源文件中,當需要使用一個在其他地方存在的對象時,應該在前面先輸入語句extern XXXX(類型名)  obj.
3、無論什麼時候,你要使用一個對象的接口時——比如上文的obj,有一個接口爲void aaa();那麼,你比如讓接口在此時可見。一般的做法是包含該類的頭文件。

 

我很討厭到處包含頭文件的方法。可是當我extern XXXX obj的時候,往往我也需要使用obj的接口——這時候,又不得不使那些接口可見——可是用申明函數的方法是不行的!——因爲禁止類成員函數的二次聲明!像這樣的句子CLog CLog::aaa();  防在任何地方都會出錯——“不允許成員函數重新聲明”。

 

於是沒辦法,我只有每次都包含頭文件。可是我還是想辦法,想盡量少包含。那麼我就想,既然頭文件有保護符,那麼編譯了一次以後就應該一直存在。於是我研究起它如何編譯來…… 我想,既然頭文件保護符的目的是使頭文件只被編譯一次。那麼第二次再使用該頭文件的時候,由於已經是define了的,所以所有代碼就應該跳過——等於說是根本沒有理會整個頭文件……但是無論我把包含頭放在哪裏、或者是哪裏不包含,都會毫不含糊地給我報錯……

 

也就是說,這跟編譯順序無關……於是我想編譯器肯定是分別編譯每一個cpp文件。在這種情況下,就算前一個文件已經編譯了該頭文件,後面一個文件仍需要包含相同的頭文件——因爲彼此是相對獨立的。等到最後一切編譯完的時候再來優化?……

 

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