2013-04-16 45 views
1

我想知道爲什麼每個MFC應用程序(其中強制使包含在每個文件stdafx.h中第一首部)存在此行:爲什麼stdfax.h應該是第一個包含在MFC應用程序中的?

#ifndef __AFXWIN_H__ 
    #error "include 'stdafx.h' before including this file for PCH" 
#endif 

什麼是這種行爲背後的原因(S)?

+2

請注意,PCH代表_Pre Compiled Header_,這有助於編譯器減少編譯時間。 – deepmax

+0

預編譯頭文件只能在第一個包含相同頭文件時使用。 – sehe

+0

@sehe:更像是這個的重複(http://stackoverflow.com/questions/2976035/purpose-of-stdafx-h) – lucasg

回答

3

它使用預編譯頭(PCH)時,原因爲何之前#include "stdafx.h"是不應該有任何的唯一真正:

Visual C++會不會中的#include「stdafx之前編譯任何東西。 h「 in 源文件,除非編譯選項/Yu'stdafx.h'未被選中 (默認);它假定所有代碼源直到幷包括 該行已經編譯

http://en.wikipedia.org/wiki/Precompiled_header

+0

謝謝,MSDN.com在這件事情上並沒有真正的幫助...... – lucasg

2

你應該閱讀這簡短的描述stdafx.h

兼容的編譯器(例如,Visual C++ 6.0和更新版本)將 預編譯該文件以減少整體編譯時間。除非編譯選項/Yu'stdafx.h未被選中(默認爲 ),否則Visual C++將 不會在源文件中的#include「stdafx.h」之前編譯任何內容。它假定源代碼中的所有代碼都已經編譯完成並且包含該行 。

它含蓄地說,要實現PCH的優點,您必須儘快包含stdafx.h包含層次結構。

0

stdafx.h文件包含通用標頭,這些標頭在項目中的不同文件中使用。包含它並不是必須的,但是必須管理項目中的所有標題,這將導致沿着不同的文件重複標題。

相關問題