2015-05-01 25 views
1

讓我們假設我的.h文件創建預編譯頭如下所示:預編譯頭文件是遞歸的嗎?

stdafx.h中

#include "A.h" //an external library 

..和「啊」包括很多其他的頭:

#include "B.h" //other headers from an external library included by "A.h" 
#include "C.h" 
//... 

請問PRECOM還爲「Bh」和「Ch」(以及這兩個文件包含的頭文件,等等)生成堆頭,還是必須在我的「stdafx」中包含「Bh」和「Ch」。 h「呢?

+0

它會被生成,但是在你的stdafx.h中包含Bh和Ch是一個好習慣如果你正在使用這些文件中聲明的任何東西,即使它們已經包含在Ah – JovanMali

+0

@JovanMalinovic:爲什麼?當然,如果包含A並依賴於包含B和C是很自然的事情,那麼在預編譯頭文件中也是很自然的。有什麼不同? – RichieHindle

回答

3

是,預編譯的國家將包括B和C.

預編譯的工作原理是儘可能運行編譯器爲stdafx.h中結束和傾倒的狀態到磁盤,然後恢復該狀態編譯前體的每個源文件。編譯器在編譯stdafx.h時看到的所有內容都進入該狀態。

換言之:無論您是生成預編譯狀態還是僅僅編譯源文件「正常」,編譯stdafx.h的過程都完全相同 - 只是在預編譯的情況下,編譯器它停止在文件末尾,即使它想要,它也不能對待B和C)。