2009-08-24 99 views
5

如果我把一個頭(AH)到stdafx.h中和頭包括未在stdafx.h中提到的另一頭(BH),將BH可以在每次有人訪問包括AH或它是作爲一部分編譯的啊?如果它被編譯到a.h中,當有人直接包含b.h時會發生什麼?這是預編譯還是不?問題在Visual C++預編譯頭

我的問這個問題的動機是我試圖優化stdafx.h中的文件爲我工作,對軟件的內容。重建和增量構建時間對我們都很重要。我想知道是否可以簡單搜索所有.cpp文件中的#include指令並計算每個文件包含的次數。通常包含的文件可能是stdafx.h文件的很好候選。當然,如果我不僅要考慮包含哪些文件,還要考慮包含文件包含哪些文件,這種策略完全是假的。

我懷疑它的問題,但我們使用Visual Studio 2005

+0

請爲此投票:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-shared-between-pro – 2013-11-08 09:27:26

回答

4

A.H和b.h將是預編譯頭的一部分,沒有必要後,包括他們。所有你需要的是包含stdafx.h,其中需要a.h或b.h。如果你有啊或BH stdafx.h中(stdafx.h中之前,所有的代碼包括:被忽略)後明確,那麼它會不會被編譯,第二次(只是因爲他們通常是由#pragma once指令或保護的定義),但編譯器將在硬盤上打開該文件,如果你問這個問題,

順便說一下,你應該知道,你可以使用幾個預編譯頭文件(但每個cpp文件中不超過一個)。

+3

你說什麼包括stdafx.h之後的ah或bh在技術上是正確的 - 編譯器會再次查看頭文件 - 但大多數頭文件使用#pragma一次或包含警衛以防止發生這種情況。事實上,我會建議包括A.H,隨時隨地b.h需要它們即使A.H在stdafx.h中 - 否則你將無法調整stdafx.h中的內容後,而不會在編譯錯誤無盡的名單。 – 2009-08-24 20:33:18

+0

是的,它們不會被編譯,但是它們將在技術上由編譯器打開。 – 2009-08-24 20:38:19

+1

我同意尼克的想法是有幫助的,但我只是害怕會有性能問題,因爲我們需要額外的磁盤IO來找到#progma一次 – 2009-08-25 00:50:29