我想知道爲什麼每個MFC應用程序(其中強制使包含在每個文件stdafx.h中第一首部)存在此行:爲什麼stdfax.h應該是第一個包含在MFC應用程序中的?
#ifndef __AFXWIN_H__
#error "include 'stdafx.h' before including this file for PCH"
#endif
什麼是這種行爲背後的原因(S)?
我想知道爲什麼每個MFC應用程序(其中強制使包含在每個文件stdafx.h中第一首部)存在此行:爲什麼stdfax.h應該是第一個包含在MFC應用程序中的?
#ifndef __AFXWIN_H__
#error "include 'stdafx.h' before including this file for PCH"
#endif
什麼是這種行爲背後的原因(S)?
它使用預編譯頭(PCH)時,原因爲何之前#include "stdafx.h"
是不應該有任何的唯一真正:
Visual C++會不會中的#include「stdafx之前編譯任何東西。 h「 in 源文件,除非編譯選項/Yu'stdafx.h'未被選中 (默認);它假定所有代碼源直到幷包括 該行已經編譯
謝謝,MSDN.com在這件事情上並沒有真正的幫助...... – lucasg
你應該閱讀這簡短的描述stdafx.h
兼容的編譯器(例如,Visual C++ 6.0和更新版本)將 預編譯該文件以減少整體編譯時間。除非編譯選項/Yu'stdafx.h未被選中(默認爲 ),否則Visual C++將 不會在源文件中的#include「stdafx.h」之前編譯任何內容。它假定源代碼中的所有代碼都已經編譯完成並且包含該行 。
它含蓄地說,要實現PCH的優點,您必須儘快包含stdafx.h
包含層次結構。
stdafx.h
文件包含通用標頭,這些標頭在項目中的不同文件中使用。包含它並不是必須的,但是必須管理項目中的所有標題,這將導致沿着不同的文件重複標題。
請注意,PCH代表_Pre Compiled Header_,這有助於編譯器減少編譯時間。 – deepmax
預編譯頭文件只能在第一個包含相同頭文件時使用。 – sehe
@sehe:更像是這個的重複(http://stackoverflow.com/questions/2976035/purpose-of-stdafx-h) – lucasg