第二篇:淺談自定義頭文件可能導致的重定義問題


前言

       總看到一些地方說定義語句別放在頭文件中,因為會引起重定義。但具體編程中,卻發現有些定義又不得不放在頭文件中。

       這可如何是好?基於對這個問題的思考,有了這篇隨筆。

重定義產生的情況

       情況一:多個源文件包含了同一個頭文件時,如果頭文件中有某個局部變量或者非內聯函數的定義,那么相當於每個源文件都把該局部變量或者非內聯函數定義了一次。而它們(局部變量或者非內聯函數)在這種情況下默認又是全局的,那么自然會導致重定義錯誤。
       情況二:某個源文件多次包含同一個頭文件時,如果頭文件中有定義語句,那么不管是什么東西的定義,都會產生重定義錯誤。

解決方法

       針對情況一:我們應避免在頭文件中定義局部變量或者非內聯函數。而由於編譯器會將類,內聯函數以及const變量默認視為定義它們的源文件所私有,因此它們(類,內聯函數以及const變量)可以定義在頭文件中。
       針對情況二:我們可以在頭文件中使用一種叫做頭文件保護符的東西,格式如下:

1 #ifndef A_H
2 #define A_H
3 
4 /* 這里寫真正的頭文件 */
5 
6 #endif

        這樣就能保證頭文件不會被某個源文件重復包含。不但避免了一種重定義的情況,還能使得程序的效率提高,何樂而不用呢?

總結

       只要我們的代碼做到上述“解決方法”中的那兩點,頭文件的重定義問題就基本解決了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM