預編譯標頭檔案

2021-07-03 01:29:52 字數 2274 閱讀 5349

fatal error c1083: 無法開啟預編譯標頭檔案:「debug/ugface.pch」: no such file or  directory  

解決方法:修改:專案->屬性->c/c++ ->預編譯頭->不使用預編譯頭 即可。

2。先開啟乙個以前做了一下的工程,編譯通過,能執行。我就稍微修改了一下**(只是修 改乙個引數使寫入ini檔案的整數由0變為10),這時編譯通不過了,提示標頭檔案「stdafx.h」編譯錯誤(具體錯誤提示忘記了),錯誤位置指向應用程式類的原始檔的語句「#include "stdafx.h"」。不包含這個檔案是不行的,左看右看沒找出個原因來,甚至把**改回原來的樣子,還是不行。到網上一查,發現這麼一段話:

學用visual c++ 6.0的第乙個例程就讓我出了錯.用嚮導生成第乙個基於對話方塊的project之後,我按照書([visual c++物件導向與視覺化程式設計(第二版)]清華大學出版社pp76)上的例子開始了我的第乙個程式,當我按照書上的源程式乙個字乙個字地輸進去之後,始終有乙個錯誤:fatal error c1010: unexpected end of file while looking for precompiled header directive.找了無數次之後,我決定把嚮導生成的包括標頭檔案的語句:include"stdafx.h"保留(而這之前我是把它刪掉了的,因為書上的例子沒有這句.)咦,這下就對了.這是為什麼呢?我百思不得其解.

來到我的vc源**目錄,我注意到每個project每個project下面的debug資料夾都特別大,而且乙個擴充套件名為 .pch的檔案占去了絕大部分,我刪掉之好像對程式編譯執行沒有什麼影響.於是抱著對.pch檔案的好奇,我在網上搜到了我疑惑之處的解答.這就是vc++6.0給我們帶來的:預編譯標頭檔案.預編譯標頭檔案(一般擴充套件名為.pch),是把乙個工程中較穩定的**預先編譯好放在乙個檔案(.pch)裡.這些預先編譯好的**可以是任何的c/c++**--甚至可以是inline函式,只是它們在整個工程中是較為穩定的,即在工程開發過程中不會經常被修改的**.

為什麼需要預編譯標頭檔案?

一言以蔽之:提高編譯速度.一般地,編譯器以檔案為單位編譯,如果修改了一工程中的乙個檔案則所有檔案都要重新編譯,包括標頭檔案裡的所有東西(eg.macro巨集,preprocessor預處理),而vc程式中,這些標頭檔案中所包括的東西往往是非常大的,編譯之將佔很長的時間.但它們又不常被修改,是較穩定的,為單獨的乙個小檔案而重新編譯整個工程的所有檔案導致編譯效率下降,因此引入了.pch檔案.

如何使用預編譯標頭檔案以提高編譯速度?

要使用預編譯標頭檔案,必須指定乙個標頭檔案(.h),它包含我們不會經常修改的**和其他的標頭檔案,然後用這個標頭檔案(.h)來生成乙個預編譯標頭檔案(.pch)vc預設的標頭檔案就是stdafx.h,因為標頭檔案是不能編譯的,所以我們還需要乙個.cpp檔案來作橋梁,vc預設的檔案為stdafx.cpp,這個檔案裡只有一句**就是:#include "stdafx.h".接下來要用它生成.pch檔案,涉及到幾個重要的預編譯指令:/yu,/yc,/yx,/fp.簡單地說,/yc是用來生成.pch檔案的編譯開關.在project->setting->c/c++的category裡的precompiled header,然後在左邊的樹形檢視中選擇用來編譯生成.pch檔案的.cpp檔案(預設即stdafx.cpp)你就可以看到/yc這個開關,它表示這個檔案編譯了以後是否生成.pch檔案(可能/yc的c表示create)./fp指令指定生成的.pch檔案的名字及路徑(可能/fp的p代表path)./yu的u即use使用,工程中只要包括了.h檔案的檔案都會有這個/yu指令.如果選擇自動automatic...的話則原來為/yc的地方就換成了/yx指令.如果選擇自動,則每次編譯時編譯器會看以前有沒有生成過.pch檔案,有則不現生成否則就再次編譯產生.pch檔案.

注意:b.在任何乙個包括了將要預編譯的標頭檔案而使用了.pch檔案的工程檔案的開頭,一定必須要是在最開頭,你要包含那個指定生成.pch檔案的.h檔案(通過.cpp檔案包括,預設為stdafx.cpp),如果沒包括將產生我最開頭產生的錯誤.如果不是在最開頭包括將產生讓你意想不到的莫名其妙錯誤,如若不信,盍為試之?

c.預編譯檔案.pch生成之很耗時間,而且生成之後它也很佔磁碟空間,常在5-6m,注意專案完成之後及時清理無用的.pch檔案以節約磁碟空間.

d.如果丟了或刪了.pch檔案而以後要再修改工程檔案時,可將指定的/yc的.cpp檔案(預設為stdafx.cpp)重新編譯一次即可再次生成.pch檔案,不用傻傻的按f7或rebuild all

照這麼說,我這種情況只要重新將「stdafx.cpp」編譯一下就可以了,一試,馬上能編譯執行了。心裡不知道有多高興,因為以前碰到過幾次這樣的問題都不知道怎麼解決,只好重新建立乙個相同的工程。

看來什麼東西都要從原理入手,才能更容易地解決。

預編譯標頭檔案

stdafx.h標頭檔案的作用 今天在改乙個很大的程式,慢慢看,慢慢改。突然發現乙個.c檔案,裡面什麼也沒有,就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。結果不能編譯了,我靠 fatal error c1083 cannot open precompiled he...

預編譯標頭檔案

一 預編譯標頭檔案使用經驗 如果預編譯標頭檔案被正確使用時,它確實大大提高我們程式設計的效率 你工作中,有多少時間是在等編譯完成?很多吧,這個時候一般都很無聊,無奈,浪費時間 但是他太容易用錯了.下面是幾種常見的錯誤用法.1 在預編譯標頭檔案裡include自己的標頭檔案 當然,如果你的標頭檔案不經...

預編譯標頭檔案

預編譯標頭檔案 今天在改乙個很大的程式,慢慢看,慢慢改。突然發現乙個.c檔案,裡面什麼也沒有,就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。結果不能編譯了,我靠 fatal error c1083 cannot open precompiled header fil...