2012-11-05 88 views
1

我想這是一個關於風格而不是正確性的問題。當使用預編譯頭文件時,我是否仍然在需要時包含頭文件?

使用visual studio 2012我發現使用Windows.h,direct3d11,atlbase和任何標準C++頭文件的預編譯頭文件的構建速度要比不使用它們快得多。該項目大量使用Windows,因此完全不需要將任何東西移植到此項目的其他操作系統或編譯器中。

我的問題是我真的應該包括在#include "Precomp.h"後面使用的頭文件。他們當然不會做任何事情,因爲他們有標題守衛或#pragma一次,但他們會幫助記錄依賴關係。

在.h文件中怎麼樣?我不能在那裏包含預編譯頭文件,但爲了使.h文件自包含,我總是包含例如如果它使用任何內容。但這是不必要的,因爲包含該.h文件的.cpp文件將在使用該文件的.h文件之前包含「Precomp.h」文件,該文件將包含總是

所以這不是關於正確性,而是關於理解和可維護性的最佳風格。

在這種情況下,預編譯頭文件中的「最佳實踐」是什麼?

回答

1

經驗法則很簡單:只使用從不更改的標頭。所以你只需要一次緩慢的編譯,而不再一次。

這使得SDK和編譯頭成爲一個簡單的選擇。你自己的標題,不是那麼多。那麼經驗法則第二號適用:你有你自己的標題,應該#included 無處不在?他們是否真的足夠大,能夠產生明顯的速度差異?無論如何,這幾乎總是兩次罷工。

+1

嗯,我只使用系統和編譯器頭的預編譯頭。問題是我是否在我自己的Test.h中包含了,因爲它使用了它的某些東西,或者只是依賴包含Test.h在內的任何包括它在內的預編譯頭文件。通常自行製作.h文件是很好的做法,但在這種情況下,我知道*預編譯的頭文件將始終包含在內。 – jcoder

+0

對,所以不要。 –

相關問題