C++代碼中,當(dāng)一個文件中需要用到另一個文件中定義的類、結(jié)構(gòu)、常量等內(nèi)容時,必須要用到include。
在使用include時,可以沒有任何規(guī)則,隨意include。但是這樣做的結(jié)果不是循環(huán)嵌套,就是導(dǎo)致編譯過程變得異常緩慢,或者產(chǎn)生了大量的PC-Lint告警。
所以,我們要為include設(shè)置一些規(guī)則。
在設(shè)置這些規(guī)則之前,首先說明一下什么時候需要include。要說明這點,需要從編譯過程入手。
程序編譯后,會生成可執(zhí)行的二進制數(shù)據(jù)。在Windows系統(tǒng)中,這些數(shù)據(jù)被生成到PE(Portable Executable)格式文件中。Exe文件就是一種PE格式文件。其中,程序中定義到的變量、方法等都在PE文件中有各自的存儲空間。當(dāng)PE文件被加載時,這些變量、方法等會在內(nèi)存中被加載。
從上面可以得出結(jié)論:程序編譯時,必須指導(dǎo)每個變量、方法中的參數(shù)或返回值的類型,以便于編譯時為其分配足夠的內(nèi)存空間。所以,需要在編譯時include所有需要參數(shù)的類型以便于為其分配足夠的內(nèi)存空間。
但是這有一個特例,那就是指針類型變量。在C++的編譯過程中,系統(tǒng)只會為指針類型變量分配4個字節(jié)的內(nèi)存空間。所以,對于指針類型變量,不需要include,只需要class聲明。
好!到了這里,我們就可以得出include的第一個使用規(guī)則了:
1、只有編譯程序時必須要知道其確切存儲空間的變量,才需要include其類型所在的頭文件。
2、對于指針的變量,只需要class聲明,不需要include頭文件。除非用到了該指針變量中的某些接口方法。
3、除了子類要在.h文件中include父類的.h文件之外,其他include盡量只放到cpp文件中。
以上3個規(guī)則就是我們使用include時要注意的。其中,第3個規(guī)則的前半部分的依據(jù)是規(guī)則1;后半部分的依據(jù)是盡量減少不必要的關(guān)聯(lián),具體描述請參見《Effective C++》編寫代碼使用include時,如果采用了上述3個規(guī)則,基本上可以保證程序不會有太多無關(guān)的關(guān)聯(lián),對降低程序的耦合度有很大幫助。
在使用include時,可以沒有任何規(guī)則,隨意include。但是這樣做的結(jié)果不是循環(huán)嵌套,就是導(dǎo)致編譯過程變得異常緩慢,或者產(chǎn)生了大量的PC-Lint告警。
所以,我們要為include設(shè)置一些規(guī)則。
在設(shè)置這些規(guī)則之前,首先說明一下什么時候需要include。要說明這點,需要從編譯過程入手。
程序編譯后,會生成可執(zhí)行的二進制數(shù)據(jù)。在Windows系統(tǒng)中,這些數(shù)據(jù)被生成到PE(Portable Executable)格式文件中。Exe文件就是一種PE格式文件。其中,程序中定義到的變量、方法等都在PE文件中有各自的存儲空間。當(dāng)PE文件被加載時,這些變量、方法等會在內(nèi)存中被加載。
從上面可以得出結(jié)論:程序編譯時,必須指導(dǎo)每個變量、方法中的參數(shù)或返回值的類型,以便于編譯時為其分配足夠的內(nèi)存空間。所以,需要在編譯時include所有需要參數(shù)的類型以便于為其分配足夠的內(nèi)存空間。
但是這有一個特例,那就是指針類型變量。在C++的編譯過程中,系統(tǒng)只會為指針類型變量分配4個字節(jié)的內(nèi)存空間。所以,對于指針類型變量,不需要include,只需要class聲明。
好!到了這里,我們就可以得出include的第一個使用規(guī)則了:
1、只有編譯程序時必須要知道其確切存儲空間的變量,才需要include其類型所在的頭文件。
2、對于指針的變量,只需要class聲明,不需要include頭文件。除非用到了該指針變量中的某些接口方法。
3、除了子類要在.h文件中include父類的.h文件之外,其他include盡量只放到cpp文件中。
以上3個規(guī)則就是我們使用include時要注意的。其中,第3個規(guī)則的前半部分的依據(jù)是規(guī)則1;后半部分的依據(jù)是盡量減少不必要的關(guān)聯(lián),具體描述請參見《Effective C++》編寫代碼使用include時,如果采用了上述3個規(guī)則,基本上可以保證程序不會有太多無關(guān)的關(guān)聯(lián),對降低程序的耦合度有很大幫助。

