預編譯頭 #include"預編譯標頭檔案"為何要放在第一句
預編譯頭原理
你有兩個檔案a.cpp和b.cpp,都包含了同一個標頭檔案c.h。那麼正常的流程是:將c.h和a.cpp合併,編譯成a.obj;將c.h和b.cpp合併,編譯成b.obj;最後將a.obj和b.obj連結成可執行檔案。標頭檔案c.h的內容實際上被解析了兩遍。那幹嘛不把c.h解析好了儲存成臨時檔案,用時讀入!預編譯頭就是這個原理:把 預編譯標頭檔案 事先編譯成一種二進位制的中間格式,供後續的編譯過程使用。
如果預編譯頭所涉及的部分不發生改變的話,在隨後的編譯過程中此部分不重新進行編譯。
每一個cpp檔案裡都必須#include”預編譯標頭檔案”
在cpp裡沒有#include”預編譯標頭檔案”時:報錯:fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source?(StdAfx.h是我的預編譯標頭檔案)
#include”預編譯標頭檔案”指令必須載入第一句
所有在指令 #include "預編譯標頭檔案" 前的程式碼都是預編譯的, 它跳過 #include "預編譯標頭檔案"指令 及 此指令之前的指令,使用.pch編譯這條指令之後的所有程式碼。也就是說在一個jiese.cpp檔案裡
#include ”jiese.h”
#inlcude “stdafx.h”
這兩句相當於只有一句#inlcude “stdafx.h”, #include ”jiese.h”指令不會被編譯
生成預編譯標頭檔案是很耗時間的。同時你得注意預編譯標頭檔案通常很大。
它們都是編譯器之間不相容的^_^,就是說你不能把VC生成的預編譯頭拿到GCC上去用。 vs2010預編譯頭設定方法,工程屬性視窗
預編譯頭生成檔案