2009-06-26 103 views
2

使用預編譯頭文件時,每個文件是否需要#include "stdafx.h"?或者只有源文件需要包含它。MSVC預編譯頭文件:哪些文件需要#include「stdafx.h」?

編輯:另外,我的預編譯頭文件#includes很多STL頭。但是,在我的頭文件中,我有時會返回std::vector或類似的東西,所以我需要#include <vector>。這比包含stdafx.h更糟嗎?我需要包含我的單元測試框架的定義。

回答

4

每個源文件都需要在任何非註釋行之前包含它。標題不需要包含它,因爲每個源文件都會在其他標題之前包含它。

+0

但是如果來自另一個項目的源文件包含此頭文件呢?在這種情況下,第一個項目的stdafx.h將不包含在內。 – 2009-11-12 20:11:23

+0

每個項目只允許一個預編譯頭文件,並且每個_source file_(不包括來自其他頭文件!)都必須首先包含它。如果你想使用不同預編譯頭文件的兩個項目,沒問題 - 只要它們是單獨的項目。他們每個人都會得到自己的頭文件,沒有衝突。 – bdonlan 2009-11-12 21:20:05

0

您可以設置是否在項目級別或文件級別使用預編譯頭文件。對於項目設置,轉到項目屬性對話框,然後單擊配置屬性/ C/C++ /預編譯頭。有一個創建/使用預編譯頭的選項。通過在文件屬性對話框上設置相同的選項,可以覆蓋每個.cpp文件上的項目級別設置。

0

你所有的C/C++文件都需要在最上面安裝預編譯頭文件是 - 如果它爲該項目設置的話。但是你可以根據每個C/C++文件關閉/打開它(Kei說的)。

如果您有要包含的標準頭文件,請將它們全部放在預編譯頭文件中。然後你想在正常的頭文件(.h)文件中使用它們。只要所有項目和文件都使用預編譯頭文件。

0

正如其他人所說,只有你的源文件需要包括預編譯頭。我只補充一點,在我看來,代碼應該正確地編譯,不管是否帶有預編譯頭文件。爲了達到這個目的,標題應該是自包含的,不要依賴包括其他所需標題的源文件。我看到預編譯頭只是爲了加快編譯速度,而不是作爲項目中所有已使用頭的存儲庫。