預編譯標頭檔案的使用

2021-05-11 11:12:19 字數 3158 閱讀 2566

所謂預編譯頭就是把乙個工程中的一部分**,預先編譯好放在乙個檔案裡

(通常是以

.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 關鍵字...