所謂預編譯頭就是把乙個工程中的一部分**,預先編譯好放在乙個檔案裡
(通常是以
.pch
為副檔名的
),這個檔案就稱為預編譯標頭檔案。這些預先編譯好的**可以是任何
c++**,但是必須是穩定的,在工程開發的過程中不會被經常改變。如果這些**被修改,則需要重新編譯生成預編譯標頭檔案。注意生成預編譯標頭檔案是很耗時間的,同時你得注意預編譯標頭檔案通常很大,注意及時清理那些沒有用的預編譯標頭檔案。
也許你會問:現在的編譯器都有
time stamp
的功能,編譯器在編譯整個工程的時候,它只會編譯那些經過修改的檔案,而不會去編譯那些從上次編譯過,到現在沒有被修改過的檔案。那麼為什麼還要預編譯標頭檔案呢?
答案在這裡,我們知道編譯器是以檔案為單位編譯的,乙個檔案經過修改後,會重新編譯整個檔案,當然在這個檔案裡包含的所有標頭檔案中的東西(
.eg macro, preprocesser
)都要重新處理一遍。
vc的預編譯標頭檔案儲存的正是這部分資訊。以避免每次都要重新處理這些標頭檔案。
根據上文介紹,預編譯標頭檔案的作用當然就是提高編譯速度了,有了它你沒有必要每次都編譯那些不需要經常改變的**。編譯效能當然就提高了。
要使用預編譯頭,我們必須指定乙個標頭檔案,這個標頭檔案包含我們不會經常改變的**和其他的標頭檔案,然後我們用這個標頭檔案來生成乙個預編譯標頭檔案(
.pch
檔案)。
想必大家都知道
stdafx.h
這個檔案,很多人都認為這是
vc提供的乙個
「系統級別
」的,編譯器自帶的乙個標頭檔案。其實不是的,這個檔案可以是任何名字。我們來考察乙個典型的由
生成的mfc dialog based
程式的預編譯標頭檔案。(因為
會為我們指定好如何使用預編譯標頭檔案,預設的是
stdafx.h
,這是vc
起的名字)。我們會發現這個標頭檔案裡包含了以下的標頭檔案:
#include // mfc core and standard components
#include // mfc extensions
#include // mfc automation classes
#include // mfc support for internet explorer 4
#include // common controls
這些正是使用
mfc的必須包含的標頭檔案,當然我們不太可能在我們的工程中修改這些標頭檔案的,所以說他們是穩定的。
那麼我們如何指定它來生成預編譯標頭檔案。我們知道乙個標頭檔案是不能編譯的。所以我們還需要乙個
cpp檔案來生成
.pch
檔案。這個檔案預設的就是
stdafx.cpp
。在這個檔案裡只有一句**就是:
#include 「stdafx.h」
。原因是理所當然的,我們僅僅是要它能夠編譯而已
,也就是說,要的只是它的
.cpp
的副檔名。我們可以用
/yc編譯開關來指定
stdafx.cpp
來生成乙個
.pch
檔案,通過
/fp編譯開關來指定生成的
pch檔案的名字。開啟
project ->setting->c/c++
對話方塊。把
category
指向precompiled header
。在左邊的樹形檢視裡選擇整個工程
project options(
右下角的那個白的地方
)可以看到
/fp 「debug/pch.pch」
,這就是指定生成的
.pch
檔案的名字,預設的通常是
<
工程名》.pch
(我的示例工程名就是
pch)。然後,在左邊的樹形檢視裡選擇
stdafx.cpp
,這時原來的
project option
變成了source file option
(原來是工程,現在是乙個檔案,當然變了)。在這裡我們可以看到
/yc開關,
/yc的作用就是指定這個檔案來建立乙個
pch檔案。
/yc後面的檔名是那個包含了穩定**的標頭檔案,乙個工程裡只能有乙個檔案的可以有
yc開關。
vc就根據這個選項把
stdafx.cpp
編譯成乙個
obj檔案和乙個
pch檔案。
然後我們再選擇乙個其它的檔案來看看,在這裡,
precomplier
選擇了use
⋯⋯⋯一項,標頭檔案是我們指定建立
pch
檔案的stdafx.h
檔案。事實上,這裡是使用工程裡的設定,
/yu」stdafx.h」
。這樣,我們就設定好了預編譯標頭檔案。也就是說,我們可以使用預編譯頭功能了。
以下是注意事項: 1
)如果使用了
/yu,就是說使用了預編譯,我們在每個
.cpp
檔案的最開頭,包含你指定產生
pch檔案的
.h檔案(預設是
stdafx.h
)不然就會有問題。如果你沒有包含這個檔案,就告訴你
unexpected file end。2
)如果你把
pch檔案不小心丟了,編譯的時候就會產生很多的不正常的行為。根據以上的分析,你只要讓編譯器生成乙個
pch檔案。也就是說把
stdafx.cpp
(即指定
/yc的那個
cpp檔案)重新編譯一遍。
如果工程很大,標頭檔案很多,而有幾個標頭檔案又是經常要用的,那麼 1
、把這些標頭檔案全部寫到乙個標頭檔案裡面去,比如寫到
preh.h 2
、寫乙個
preh.cpp
,裡面只一句話:
#include "preh.h" 3
、對於preh.cpp
,在project setting
裡面設定
creat precompiled headers
,對於其他
.cpp
檔案,設定
use precompiled header file
預編譯標頭檔案的使用
1 摘要 本文介紹vc6的預編譯功能的使用,由於預編譯詳細使用比較的複雜,這裡只介紹幾個最重要的預編譯指令 yu,yc,yx,fp。其它的詳細資料可以參考 msdn compiler and linker details creating precompiled header files 2 關鍵字...
預編譯標頭檔案的使用
所謂的預編譯頭就是把乙個工程中的那一部分 預先編譯好放在乙個檔案裡 通常是以.pch為副檔名的 這個檔案就稱為預編譯標頭檔案c c 甚至是inline的函式,但是必須是穩定的,在工程開發的過程中不會被經常改變。如果這些 被修改,則需要重新編譯生成預編譯標頭檔案。注意生成預編譯標頭檔案是很耗時間的。同...
預編譯標頭檔案的使用
1 摘要 本文介紹vc6的預編譯功能的使用,由於預編譯詳細使用比較的複雜,這裡只介紹幾個最重要的預編譯指令 yu,yc,yx,fp。其它的詳細資料可以參考 msdn compiler and linker details creating precompiled header files 2 關鍵字...