欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3130|回復(fù): 0
收起左側(cè)

無法打開預(yù)編譯頭文件的解決方法及預(yù)編譯頭原理

[復(fù)制鏈接]
ID:107189 發(fā)表于 2016-3-6 02:18 | 顯示全部樓層 |閱讀模式
  1、用VC.NET編輯程序,按Ctrl+F7,出現(xiàn)下列錯(cuò)誤:
fatal error C1083: 無法打開預(yù)編譯頭文件:“Debug/UGFace.pch”: No such file or  directory  
解決方法:修改:項(xiàng)目->屬性->C/C++ ->預(yù)編譯頭->不使用預(yù)編譯頭 即可。
2、先打開一個(gè)以前做了一下的工程,編譯通過,能運(yùn)行。我就稍微修改了一下代碼(只是修 改一個(gè)參數(shù)使寫入INI文件的整數(shù)由0變?yōu)?0),這時(shí)編譯通不過了,提示頭文件“stdafx.h”編譯錯(cuò)誤(具體錯(cuò)誤提示忘記了),錯(cuò)誤位置指向應(yīng)用程序類的源文件的語句“#include "stdafx.h"”。不包含這個(gè)文件是不行的,左看右看沒找出個(gè)原因來,甚至把代碼改回原來的樣子,還是不行。到網(wǎng)上一查,發(fā)現(xiàn)這么一段話:

學(xué)用Visual C++ 6.0的第一個(gè)例程就讓我出了錯(cuò).用向?qū)傻谝粋(gè)基于對(duì)話框的Project之后,我按照書([Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)(第二版)]清華大學(xué)出版社pp76)上的例子開始了我的第一個(gè)程序,當(dāng)我按照書上的源程序一個(gè)字一個(gè)字地輸進(jìn)去之后,始終有一個(gè)錯(cuò)誤:fatal error C1010: unexpected end of file while looking for precompiled header directive.找了無數(shù)次之后,我決定把向?qū)傻陌^文件的語句:include"StdAfx.h"保留(而這之前我是把它刪掉了的,因?yàn)闀系睦記]有這句.)咦,這下就對(duì)了.這是為什么呢?我百思不得其解.
    來到我的VC源代碼目錄,我注意到每個(gè)Project每個(gè)Project下面的DEBUG文件夾都特別大,而且一個(gè)擴(kuò)展名為 .pch的文件占去了絕大部分,我刪掉之好像對(duì)程序編譯運(yùn)行沒有什么影響.于是抱著對(duì).pch文件的好奇,我在網(wǎng)上搜到了我疑惑之處的解答.這就是VC++6.0給我們帶來的:預(yù)編譯頭文件.預(yù)編譯頭文件(一般擴(kuò)展名為.PCH),是把一個(gè)工程中較穩(wěn)定的代碼預(yù)先編譯好放在一個(gè)文件(.PCH)里.這些預(yù)先編譯好的代碼可以是任何的C/C++代碼--甚至可以是inline函數(shù),只是它們?cè)谡麄(gè)工程中是較為穩(wěn)定的,即在工程開發(fā)過程中不會(huì)經(jīng)常被修改的代碼.
    為什么需要預(yù)編譯頭文件?
    一言以蔽之:提高編譯速度.一般地,編譯器以文件為單位編譯,如果修改了一工程中的一個(gè)文件則所有文件都要重新編譯,包括頭文件里的所有東西(eg.Macro宏,Preprocessor預(yù)處理),而VC程序中,這些頭文件中所包括的東西往往是非常大的,編譯之將占很長的時(shí)間.但它們又不常被修改,是較穩(wěn)定的,為單獨(dú)的一個(gè)小文件而重新編譯整個(gè)工程的所有文件導(dǎo)致編譯效率下降,因此引入了.PCH文件.
    如何使用預(yù)編譯頭文件以提高編譯速度?
    要使用預(yù)編譯頭文件,必須指定一個(gè)頭文件(.H),它包含我們不會(huì)經(jīng)常修改的代碼和其他的頭文件,然后用這個(gè)頭文件(.H)來生成一個(gè)預(yù)編譯頭文件(.PCH)VC默認(rèn)的頭文件就是StdAfx.h,因?yàn)轭^文件是不能編譯的,所以我們還需要一個(gè).CPP文件來作橋梁,VC默認(rèn)的文件為StdAfx.cpp,這個(gè)文件里只有一句代碼就是:#include "StdAfx.h".接下來要用它生成.PCH文件,涉及到幾個(gè)重要的預(yù)編譯指令:/Yu,/Yc,/Yx,/Fp.簡單地說,/Yc是用來生成.PCH文件的編譯開關(guān).在Project->setting->C/C++的Category里的Precompiled Header,然后在左邊的樹形視圖中選擇用來編譯生成.PCH文件的.CPP文件(默認(rèn)即StdAfx.cpp)你就可以看到/Yc這個(gè)開關(guān),它表示這個(gè)文件編譯了以后是否生成.PCH文件(可能/Yc的c表示create)./Fp指令指定生成的.PCH文件的名字及路徑(可能/Fp的p代表path)./Yu的u即use使用,工程中只要包括了.H文件的文件都會(huì)有這個(gè)/Yu指令.如果選擇自動(dòng)Automatic...的話則原來為/Yc的地方就換成了/Yx指令.如果選擇自動(dòng),則每次編譯時(shí)編譯器會(huì)看以前有沒有生成過.PCH文件,有則不現(xiàn)生成否則就再次編譯產(chǎn)生.PCH文件.
注意:
A,實(shí)際上,由Appzard項(xiàng)目向?qū)傻哪J(rèn)的頭文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很簡單.但如果你要這樣做就要記得修改相應(yīng)的Project->setting...下的幾個(gè)預(yù)編譯指(/Yc,/Yu,/Yx,/Fp)的參數(shù).

B.在任何一個(gè)包括了將要預(yù)編譯的頭文件而使用了.PCH文件的工程文件的開頭,一定必須要是在最開頭,你要包含那個(gè)指定生成.PCH文件的.H文件(通過.CPP文件包括,默認(rèn)為StdAfx.cpp),如果沒包括將產(chǎn)生我最開頭產(chǎn)生的錯(cuò)誤.如果不是在最開頭包括將產(chǎn)生讓你意想不到的莫名其妙錯(cuò)誤,如若不信,盍為試之?

C.預(yù)編譯文件.PCH生成之很耗時(shí)間,而且生成之后它也很占磁盤空間,常在5-6M,注意項(xiàng)目完成之后及時(shí)清理無用的.PCH文件以節(jié)約磁盤空間.

D.如果丟了或刪了.PCH文件而以后要再修改工程文件時(shí),可將指定的/Yc的.CPP文件(默認(rèn)為StdAfx.cpp)重新編譯一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All

    照這么說,我這種情況只要重新將“StdAfx.cpp”編譯一下就可以了,一試,馬上能編譯運(yùn)行了。心里不知道有多高興,因?yàn)橐郧芭龅竭^幾次這樣的問題都不知道怎么解決,只好重新創(chuàng)建一個(gè)相同的工程。
    以前還碰到過另外一種情況(早就解決了的):新建一個(gè)工程,隨便找一個(gè)cpp文件,按ctrl+f7系統(tǒng)將會(huì)提示:fatal error C1083: 無法打開預(yù)編譯的頭文件:”Debug/xxx.pch”: No such file or directory(其中xxx是工程的名字)這種情況也是一樣的原因,為vc的stdafx.h頭文件未編譯所致。也可以這樣解決:先F7,編譯后再ctrf+f7。
    看來什么東西都要從原理入手,才能更容易地解決。

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表