text: 預編譯頭，以節約在開發過程中編譯器反覆編譯該標頭檔案的開銷。 C語言、C++語言、Objective C語言等都有類似的技術。有的標頭檔案包含了巨量的原始碼，後續再編譯原始檔時就可以儘量直接使用這些預編譯頭。簡單示例.C++檔案source.cpp包括header.hpp：//header.hpp//source.cpp首次編譯source.cpp時，編譯器生成codice_2的預編譯頭。以後再編譯該程式時，編譯器會比較該標頭檔案的時間戳，如果標頭檔案沒有改變，編譯器直接使用預編譯頭。Visual Studio.Microsoft Visual Studio採取一個頭檔案,包含了到codice_3這一行為止的所有程式碼編譯結果。專案中的其他編譯單元，使用codice_7編譯，這將把從開頭直至codice_3這一行的原始碼跳過編譯過程，直接用預編譯頭代替。stdafx中的AFX代表Application Framework eXtensions。AFX是Microsoft Foundation Classes (MFC)的舊稱。程式設計者也可以用其他名字的標頭檔案代替stdafx.h。Visual Studio編譯器確定預編譯頭的檔名，依照下述次序：GCC.GCC3.4版開始支援預編譯頭。當編譯器輸入檔案為標頭檔案時。當gcc編譯原始檔時，對於遇到的每個標頭檔案，都在INCLUDE路徑中的每個目錄下，先搜尋追加".gch"字尾的預編譯頭，如果沒有再搜尋該標頭檔案。如果找到預編譯頭且滿足一些條件，則直接使用該預編譯頭；否則就把該標頭檔案在原始檔中展開並編譯之。 可以在編譯原始檔時使用-H選項，如果顯示的預編譯頭的全路徑這一行是以"!"開始，說明編譯器成功使用了預編譯頭；如果這一行以"x"開始，說明編譯器找到了這一預編譯頭但未能使用它。gcc對C語言的標頭檔案與C++的標頭檔案產生的格式不同，不能混用。如果標頭檔案的名字不是".h"或".hpp"字尾結尾，可以用編譯選項-x c++-header讓gcc把當前的輸入檔案當作C++標頭檔案來處理。用編譯選項-x c-header讓gcc把當前的輸入檔案當作C標頭檔案來處理。使用預編譯頭時必須滿足下列條件：-fmessage-length= -fpreprocessed -fsched-interblock -fsched-spec-fsched-spec-load -fsched-spec-load-dangerous-fsched-verbose=number -fschedule-insns -fvisibility=-pedantic-errors上述條件如果不被滿足，編譯器將自動使用標頭檔案而不是對應的預編譯頭。C++Builder.在專案預設配置中，C++Builder編譯器無保留地生成在codice_10之前所有標頭檔案的預編譯頭。如果可能的話，預編譯頭會被專案的所有模組共享。例如，當使用Visual Component Library時，通常首先會包含codice_15標頭檔案，該標頭檔案含有大多數經常被用到的VCL標頭檔案。因此，預編譯頭被全專案共享可以顯著減少生成時間。另外，C++Builder能設定為使用一個特定的標頭檔案作為預編譯頭，和Visual C++提供的機制類似。C++Builder 2009引入了“Precompiled Header Wizard、生成並測試預編譯頭。
metadata.dataset: erhwenkuo/wikipedia-zhtw
metadata.title: 預編譯頭
metadata.url: https://zh.wikipedia.org/wiki?curid=4801203