解析VC中預編譯標頭檔案的深入分析

2022-10-04 05:12:07 字數 2178 閱讀 4981

一。為什麼預編譯標頭檔案:

預編譯頭的概念:

所謂的預編譯頭就是把乙個工程中的那一部分**,預先編譯好放在乙個檔案裡(通常是以.pch為副檔名的),這個檔案就稱為預編譯標頭檔案這些預先編譯好的**可以是任何的c/c++**,甚至是inline的函式,但是必須是穩定的,在工程開發的過程中不會被經常改變。如果這些**被修改,則需要重新編譯生成預編譯標頭檔案。注意生成預編譯標頭檔案是很耗時間的。同時你得注意預編譯標頭檔案通常很大,通常有6-7m大。注意及時清理那些沒有用的預編譯標頭檔案。

也許你會問:現在的編譯器都有time stamp的 功能,編譯器在編譯整個工程的時候,它只會編譯那些經過修改的檔案,而不會去編譯那些從上次編譯過,到現在沒有被修改過的檔案。那麼為什麼還要預編譯標頭檔案呢?答案在這裡,我們知道編譯器是以檔案為單位編譯的,乙個檔案經過修改後,會重新編譯整個檔案,當然在這個檔案裡包含的所有標頭檔案中的東西(.eg macro, preprocessor )都要重新處理一遍。vc的預編譯標頭檔案儲存的正是這部分資訊。以避免每次都要重新處理這些標頭檔案。

根據上文介紹,預編譯標頭檔案的作用當然就是提高編譯速度了,有了它你沒有必要每次都編譯那些不需要經常改變的**。編譯效能當然就提高了。

我們來考察乙個典型的由appwizard生成的mfc dialog based 程式的預編譯標頭檔案。(因為appwizard會為我們指定好如何使用預編譯標頭檔案,預設的是stdafx.h,這是vc起的名字)。我們會發現這個標頭檔案裡包含了以下的標頭檔案:

#incl程式設計客棧ude     // mfc core and standard components

#include     // mfc extensions

#include     // mfc automation classes

#include // mfc sup程式設計客棧port for internet explorer 4 common controls

#include

這些正是使用mfc的必須包含的標頭檔案,當然我們不太可能在我們的工程中修改這些標頭檔案的,所以說他們是穩定的。

二。如何預編譯標頭檔案:

要使用預編譯頭,我們必須指定乙個標頭檔案,這個標頭檔案包含我們不會經常改變的**和其他的標頭檔案,然後我們用這個標頭檔案來生成乙個預編譯標頭檔案(.pc**件)想必大家都知道 stdafx.h這個檔案。很多人都認為這是vc提供的乙個「系統級別」的,編譯器帶的乙個標頭檔案。其實不是的,這個檔案可以是任何名字的。

1.如何在工程中使用預編譯標頭檔案:最簡單的是在建立工程的時候選擇「使用預編譯標頭檔案」;如果建立工程時沒選,那麼還可以在project ->setting->c/c++ ->precompimed header中設定。

2.如何指定預編譯標頭檔案的頭檔名:預設為stdafx.h,不過可以通過project ->setting->c/c++ ->precompimed header中設定成任何名字(實際是通過指令/yc, /yu)。然後再把穩定不變的**的標頭檔案包含到該標頭檔案中即可。

3.需要的實現檔案:編譯需要cpp檔案,而這個cpp檔案自然地就是頭檔名對應的cpp檔案了,在這個cpp檔案裡只有一句胡:包含要預編譯的檔案頭。

4.通過project ->setting->c/c++ ->precompimed header中設定預編譯檔案的名稱(以.pch結尾)(實際上是通過指定/fp )。

三。如何使用預編譯的標頭檔案:

1.通過project ->setting->c/c++ ->precompimed header設定好使用預編譯標頭檔案(/yc, /yu),依賴哪個標頭檔案,及預編www.cppcns.com譯好的頭檔名。

2.如果你把pc**件不小心丟了,根據以上的分析,你只要讓編譯器生成乙個pc**件就可以了。也就是說把 stdafx.cpp(即指定/yc的那個cpp檔案)重新編譯一遍就可以了。當然你可以傻傻的 rebuild all。簡單一點就是選擇那個cpp檔案,按一下ctrl + f7就可以了。

3.如果使用了/yu,就是說使用了預編譯,我們在每個.cpp檔案的最開頭,我強調一遍是最開頭,包含你指定產生pc**件的.**件(預設是stdafx.h)不然就會有問題。如果你沒有包含這個檔案,就告訴你unexpected fwww.cppcns.comile end. 如果你不是在最開頭包含的,你自己試以下就知道了,絕對有很驚人的效果。 (原因就在於編譯器編譯的時候不會編譯stdafx.h前面的標頭檔案)。

本文標題: 解析vc中預編譯標頭檔案的深入分析

本文位址: /ruanjian/c/95146.html

VC預編譯標頭檔案問題解析

一般如果有些東西多了很久了,編譯出現下列問題可能解決辦法是 用記事本開啟.dsp檔案,找到關於這樣一段 source stdafx.cpp end source file end group begin group header files 發現少了乙個編譯開關的,所以不能生成.pch檔案的 加上開...

vc 找不到預編譯標頭檔案

在將vc工程從低版本向高版本公升級的時候,可能出現下面的問題,cannot open precompiled header file projectname.pch no such file or directory 意思是找不到預編譯檔案,解決辦法 1 不使用預編譯,但這樣做不是很好,可能原來的工...

c 中預編譯標頭檔案問題

fatal error c1010 unexpected end of file while looking for precompiled header directive 今天程式設計出現了莫名奇妙的錯誤,怎麼回事呢?沒有寫錯啊?這就是預編譯帶來的問題,經常莫名奇妙出現編譯錯誤,給程式設計帶來了...