關於預編譯頭

2021-08-21 22:44:50 字數 2718 閱讀 2855

一、什麼是預編譯頭?

預編譯頭物理上與通常的的.obj檔案是一樣的,但編譯入預編譯頭的.h,.c,.cpp檔案在整個編譯過程中,只編譯一次,如預編譯頭所涉及的部分不發生改變的話,在隨後的編譯過程中此部分不重新進行編譯。進而大大提高編譯速度,並便於對頭檔案進行管理,也有助於杜絕重複包含問題。

二、什麼時候使用預編譯頭?

當大多.c或.cpp檔案都需要相同的標頭檔案時。

當某些**被大量重複使用時。

當匯入某些不同庫都有實現的函式,並產生混亂時。

三、預編譯頭所涉及的編譯開關及使用方法(for msvc)

1、自動預編譯:由編譯器決定什麼時候建立和使用預編譯頭。

編譯引數:-yx。使用此引數預設時建立以vcxy.pch命名的預編譯標頭檔案。其中x,y是vc的版本號。可以用-fp指定pch檔案的輸出路徑和檔名。

比如:cl –c

–yx

–fp「precomp.pch」 **將在當前目錄下生成precomp.pch的預編譯標頭檔案。**代表原始檔。

2、手動預編譯:

編譯引數:

-yc」預編譯的標頭檔案的名字」

此時預設建立與標頭檔案同名的預編譯標頭檔案。如要該為其他名字,可使用-fp選項。

比如:cl –c

–yc」precomp.h

」** 將建立precomp.pch的預編譯標頭檔案。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

-yu」

預編譯的標頭檔案的名字

」表示在某個原始檔時使用此預編譯頭,而不在進行重新編譯。比如:

cl –c –

yu」precomp.h」**

注:相應預編譯頭必須在前面已建立過。

四、在makefile中簡單的使用預編譯技術

obj/i386/debug.obj: debug.c debug.h

$(cc) –yc

」precomp.h

」-fo$@ debug.c

obj/i386/operatereg.obj: operatereg.c operatereg.h

$(cc) –yu

」precomp.h

」-fo$@ operatereg.c

obj/i386/watermark.obj: watermark.c watermark.h

$(cc) –yu

」precomp.h

」-fo$@ watermark.c

以下同。

其中precomp.h為想預編譯的標頭檔案。

五、關於預編譯頭的一些複雜的使用方法 如:

cl -c -yc"stuff.h" -fplevel1.pch level1.cpp -------------(1)

cl -c -yu"stuff.h" -fplevel1.pch -yc level2.cpp --------------(2)

level2.cpp的開始是這樣的,其中 #pragma hdrstop 表示預編譯結束,所以說**也可以放入預編譯頭。

#include "stuff.h"

#include "morestuff.h"

#pragma hdrstop("level2.pch")

(1)

建立使用stuff.h 重新命名為level1.pch的預編譯頭。

(2)

在從stuff.h建立的預編譯頭level1.pch的基礎上,參考level2.cpp建立另乙個預編譯頭level2.pch

此時的命名規則參見yc無引數時的使用方法。

預編譯頭的其他使用細則請參考msdn。

附:

1、

預編譯與guard巨集

這是兩個根本沒有關係的概念,如果說非要找出相同的地方,那就是預編譯頭對控制重複包含也有一定的幫助。

#ifndef _plotbrush_

#define _plotbrush_

---

#endif // _plotbrush_

這種guard巨集是防止在同乙個.c檔案中把同乙個.h檔案包含兩次。

即防止出現

#include

#include

的情況的。

而預編譯頭相當於在全域性的角度,來控制那些部分僅被編譯一次的問題。

而guard巨集只對當前編譯單元有效。在1.c中定義了_plotbrush_對2.c是根本沒影響的。

2、

98ddk中build 時,使用build –z將只編譯有改變的原始檔。-c 起清除目標資料夾的作用。

如有錯漏請指正。

written by 李智勇

2003/3/21

VC 預編譯頭

預編譯頭的概念 在很多程式中,每個原始檔都存在一些相同的部分。比如要包括相同的一些標頭檔案,而且這些標頭檔案可能很長,例如window.h。如果用普通的方法編譯這些原始檔,對這些標頭檔案在每個原始檔中的出現都要重新編譯,作了很多重複工作。如果能將這些標頭檔案專門進行編譯,並且把結果儲存起來。然後在編...

理解預編譯頭

所謂標頭檔案預編譯,就是把乙個工程 project 中使用的一些mfc標準標頭檔案 如windows.h afxwin.h 預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。一 預編譯標頭檔案說明 所謂標頭檔案預編譯,就是把乙個工程 proje...

預編譯頭報錯

預編譯頭的概念 預編譯標頭檔案通常以.pch為副檔名,是將工程中比較穩定的 預先編譯好放在這個檔案中 生成預編譯標頭檔案很耗時間,要盡量避免修改這些穩定的 如果這些 被修改,則需要重新編譯 生成預編譯標頭檔案。作用 預編譯標頭檔案可以用來提高速度,將不經常改變的 預編譯好,以免每次都和其他檔案一起編...