1. 程式人生 > >c++中的預編譯標頭檔案問題

c++中的預編譯標頭檔案問題

環境:VS2008

語言:C++

     下午出了一個非常可惡的問題,我的一個基於MFC 對話方塊的程式因為預編譯標頭檔案stdafx.h的原因始終無法編譯通過。 由於程式整體是需要預編譯標頭檔案的。因此工程內所有cpp檔案通通都包括了#include stdafx.h。

     我自己寫的檔案放在工程資料夾下自建的一個資料夾裡。比如工程名DynamicPathPlan, 我的檔案SamplePredictModel.h、SamplePredictModel.cpp放在 "C:/當前的實際機器人程式碼/DynamicPathPlan_SelfLoc/DynamicPathPlan/SelfLoc"資料夾裡面。而MFC自動生成的stdafx.h是放在工程資料夾下面。同時在SelfLoc資料夾下面還有若干自己寫的類檔案。其他的類中cpp檔案也都有#include stdafx.h,而且都沒有錯。獨獨是這麼一個檔案SamplePredictModel.cpp 中報錯:"fatal error C1083: 無法開啟包括檔案:“Stdafx.h”: No such file or directory"( 我不明白為什麼它報錯,同一目錄下其他的檔案都沒有報錯,當然如果在同目錄這些正常的檔案上嘗試通過右擊"#include stdafx.h"以開啟stdafx.h是不能開啟的)。

     如果在工程屬性中設定不使用預編譯頭當然是可以避免這一問題的,但是僅僅因為這一個檔案就要去掉所有其他檔案中的stdafx.h 實在不划算,而且對話方塊檔案中還是需要stdafx.h的。因此工程部使用預編譯頭是不行的。 我嘗試將包含語句改為 #include ../stdafx.h VC報錯說是我沒有新增stdafx.h。失敗。網上找了n多看,都不得要領。 正好想到解決方案管理器中可以給每個檔案設定是否使用預編譯頭。 因此將整個工程設為使用預編譯頭,再將SamplePredictModel.cpp 單獨設為不使用預編譯頭。然後刪掉#include ../stdafx.h。 於是。。。。整個世界清靜了。。。。編譯通過。 結論1. 工程屬性中的預編譯頭設定相當於給所有工程中的檔案都進行了同樣設定。 然而我們自己給檔案再更改它的設定,從而實現了僅單個檔案不使用預編譯頭。

錯誤型別2:

用VS2008建立了一個工程,具體是啥忘記了,

編譯時出現
fatal error C1083: 無法開啟預編譯執行標頭檔案:“Debug\xxxx.pch”: No s.........

Method1,rebuild all 

Method2,專案-〉屬性-〉C/C++ -〉預編譯頭,修改 建立/使用預編譯頭 為 建立預編譯頭. VC.net中:修改:專案->屬性->C/C++ ->預編譯頭->不使用預編譯頭 謝謝,我重新生成後,這個Error就沒有了 
謝謝各位朋友指點 VC預設在編譯StdAfx.cpp時生成預編譯標頭檔案,編譯其它cpp時使用預編譯標頭檔案,先編譯一下StdAfx.cpp即可.

錯誤型別3:

但是在vs2008裡面卻發現:

fatal error C1083: 無法開啟預編譯標頭檔案:“Debug\t.pch”: No such file or directory

本來就是一個很小的程式,自己在網上查了一下,還是不行。不得已向高手請教,可是高手卻沒空。自己就摸索著弄了起來,最後終於解決了,爽啊!

自己總結一下:

在MSDN中是這樣說的:

其實大部分原因是第一條檔案不存在,我的那個問題就是輸入第一類。這裡要涉及編譯頭的概念(以下是轉載)

預編譯頭的概念:

所謂的預編譯頭就是把一個工程中的那一部分程式碼,預先編譯好放在一個檔案裡(通常是

以.pch為副檔名的),這個檔案就稱為預編譯標頭檔案這些預先編譯好的程式碼可以是任何的

C/C++程式碼--------甚至是inline的函式,但是必須是穩定的,在工程開發的過程中不會

被經常改變。如果這些程式碼被修改,則需要重新編譯生成預編譯標頭檔案。注意生成預編

譯標頭檔案是很耗時間的。同時你得注意預編譯標頭檔案通常很大,通常有6-7M大。注意及

時清理那些沒有用的預編譯標頭檔案。

也許你會問:現在的編譯器都有Time stamp的功能,編譯器在編譯整個工程的時候,它

只會編譯那些經過修改的檔案,而不會去編譯那些從上次編譯過,到現在沒有被修改過

的檔案。那麼為什麼還要預編譯標頭檔案呢?答案在這裡,我們知道編譯器是以檔案為單

位編譯的,一個檔案經過修改後,會重新編譯整個檔案,當然在這個檔案裡包含的所有

標頭檔案中的東西(.eg Macro, Preprocesser )都要重新處理一遍。VC的預編譯標頭檔案

儲存的正是這部分資訊。以避免每次都要重新處理這些標頭檔案。

預編譯頭的作用:

根據上文介紹,預編譯標頭檔案的作用當然就是提高便宜速度了,有了它你沒有必要每次

都編譯那些不需要經常改變的程式碼。編譯效能當然就提高了。

預編譯頭的使用:

要使用預編譯頭,我們必須指定一個頭檔案,這個標頭檔案包含我們不會經常改變的

程式碼和其他的標頭檔案,然後我們用這個標頭檔案來生成一個預編譯標頭檔案(.pch檔案)

想必大家都知道 StdAfx.h這個檔案。很多人都認為這是VC提供的一個“系統級別”的

,編譯器帶的一個頭檔案。其實不是的,這個檔案可以是任何名字的。我們來考察一個

典型的由AppWizard生成的MFC Dialog Based 程式的預編譯標頭檔案。(因為AppWizard

會為我們指定好如何使用預編譯標頭檔案,預設的是StdAfx.h,這是VC起的名字)。我們

會發現這個標頭檔案裡包含了以下的標頭檔案:

#include <afxwin.h> // MFC core and standard components

#include <afxext.h> // MFC extensions

#include <afxdisp.h> // MFC Automation classes

#include <afxdtctl.h> // MFC support for Internet Explorer 4

Common Controls

#include <afxcmn.h>

這些正是使用MFC的必須包含的標頭檔案,當然我們不太可能在我們的工程中修改這些頭文

件的,所以說他們是穩定的。

那麼我們如何指定它來生成預編譯標頭檔案。我們知道一個頭檔案是不能編譯的。所以我

們還需要一個cpp檔案來生成.pch 檔案。這個檔案預設的就是StdAfx.cpp。在這個檔案

裡只有一句程式碼就是:#include “Stdafx.h”。原因是理所當然的,我們僅僅是要它能

夠編譯而已?D?D?D也就是說,要的只是它的.cpp的副檔名。我們可以用/Yc編譯開關來指

定StdAfx.cpp來生成一個.pch檔案,通過/Fp編譯開關來指定生成的pch檔案的名字。打

開project ->Setting->C/C++ 對話方塊。把Category指向Precompiled Header。在左邊的

樹形視圖裡選擇整個工程 

Project Options(右下角的那個白的地方)可以看到 /Fp “debug/PCH.pch”,這就是指

定生成的.pch檔案的名字,預設的通常是 <工程名>.pch(我的示例工程名就是PCH)。

然後,在左邊的樹形視圖裡選擇StdAfx.cpp.//這時只能選一個cpp檔案!

這時原來的Project Option變成了 Source File Option(原來是工程,現在是一個檔案

,當然變了)。在這裡我們可以看到 /Yc開關,/Yc的作用就是指定這個檔案來建立一個

Pch檔案。/Yc後面的檔名是那個包含了穩定程式碼的標頭檔案,一個工程裡只能有一個文

件的可以有YC開關。VC就根據這個選項把 StdAfx.cpp編譯成一個Obj檔案和一個PCH檔案

然後我們再選擇一個其它的檔案來看看,//其他cpp檔案

在這裡,Precomplier 選擇了 Use ⋯⋯⋯一項,標頭檔案是我們指定建立PCH 檔案的stda

fx.h

檔案。事實上,這裡是使用工程裡的設定,(如圖1)/Yu”stdafx.h”。

這樣,我們就設定好了預編譯標頭檔案。也就是說,我們可以使用預編譯頭功能了。以

下是注意事項:

1):如果使用了/Yu,就是說使用了預編譯,我們在每個.cpp檔案的最開頭,我強調一遍

是最開頭,包含 你指定產生pch檔案的.h檔案(預設是stdafx.h)不然就會有問題。如

果你沒有包含這個檔案,就告訴你Unexpected file end. 如果你不是在最開頭包含的,

你自己試以下就知道了,絕對有很驚人的效果⋯..

fatal error C1010: unexpected end of file while looking for precompiled

header directive

Generating Code...

2)如果你把pch檔案不小心丟了,編譯的時候就會產生很多的不正常的行為。根據以上

的分析,你只要讓編譯器生成一個pch檔案。也就是說把 stdafx.cpp(即指定/Yc的那個

cpp檔案)從新編譯一遍。當然你可以傻傻的 Rebuild All。簡單一點就是選擇那個cpp

檔案,按一下Ctrl + F7就可以了。不然可是很浪費時間的哦。

錯誤型別4:

1、用VC.NET編輯程式,按Ctrl+F7,出現下列錯誤:

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檔案.

注意:
A,實際上,由Appzard專案嚮導生成的預設的標頭檔案及CPP檔案StdAfx.h和StdAfx.cpp可以是任何名字的.原因很簡單.但如果你要這樣做就要記得修改相應的Project->setting...下的幾個預編譯指(/Yc,/Yu,/Yx,/Fp)的引數.


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


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


D.如果丟了或刪了.PCH檔案而以後要再修改工程檔案時,可將指定的/Yc的.CPP檔案(預設為StdAfx.cpp)重新編譯一次即可再次生成.PCH檔案,不用傻傻的按F7或Rebuild All

    照這麼說,我這種情況只要重新將“StdAfx.cpp”編譯一下就可以了,一試,馬上能編譯運行了。心裡不知道有多高興,因為以前碰到過幾次這樣的問題都不知道怎麼解決,只好重新建立一個相同的工程。
    以前還碰到過另外一種情況(早就解決了的):新建一個工程,隨便找一個cpp檔案,按ctrl+f7系統將會提示:fatal error C1083: 無法開啟預編譯的標頭檔案:”Debug/xxx.pch”: No such file or directory(其中xxx是工程的名字)這種情況也是一樣的原因,為vc的stdafx.h標頭檔案未編譯所致。也可以這樣解決:先F7,編譯後再ctrf+f7。
    看來什麼東西都要從原理入手,才能更容易地解決;

錯誤型別5:

預編譯標頭檔案

今天在改一個很大的程式,慢慢看,慢慢改。突然發現一個.c檔案,裡面什麼也沒有,

就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。

結果不能編譯了,我靠:

fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\':

No such file or directory

怎麼rebuild all都不行。

上網查了一下,才搞懂了:

----------------總結------

如果工程很大,標頭檔案很多,而有幾個標頭檔案又是經常要用的,那麼

1。把這些標頭檔案全部寫到一個頭檔案裡面去,比如寫到preh.h

2。寫一個preh.c,裡面只一句話:#include "preh.h"

3。對於preh.c,在project setting裡面設定creat precompiled headers,對於其他

.c檔案,設定use precompiled header file

//

哈哈

我試了一下,效果很明顯,不用precompiled header,編譯一次我可以去上個廁所,用

precompiled header,編譯的時候,我可以站起來伸個懶腰,活動活動就差不多啦

---------轉載的文章----------

預編譯頭的概念:

所謂的預編譯頭就是把一個工程中的那一部分程式碼,預先編譯好放在一個檔案裡(通常是

以.pch為副檔名的),這個檔案就稱為預編譯標頭檔案這些預先編譯好的程式碼可以是任何的

C/C++程式碼--------甚至是inline的函式,但是必須是穩定的,在工程開發的過程中不會

被經常改變。如果這些程式碼被修改,則需要重新編譯生成預編譯標頭檔案。注意生成預編

譯標頭檔案是很耗時間的。同時你得注意預編譯標頭檔案通常很大,通常有6-7M大。注意及

時清理那些沒有用的預編譯標頭檔案。

也許你會問:現在的編譯器都有Time stamp的功能,編譯器在編譯整個工程的時候,它

只會編譯那些經過修改的檔案,而不會去編譯那些從上次編譯過,到現在沒有被修改過

的檔案。那麼為什麼還要預編譯標頭檔案呢?答案在這裡,我們知道編譯器是以檔案為單

位編譯的,一個檔案經過修改後,會重新編譯整個檔案,當然在這個檔案裡包含的所有

標頭檔案中的東西(.eg Macro, Preprocesser )都要重新處理一遍。VC的預編譯標頭檔案

儲存的正是這部分資訊。以避免每次都要重新處理這些標頭檔案。

預編譯頭的作用:

根據上文介紹,預編譯標頭檔案的作用當然就是提高便宜速度了,有了它你沒有必要每次

都編譯那些不需要經常改變的程式碼。編譯效能當然就提高了。

預編譯頭的使用:

要使用預編譯頭,我們必須指定一個頭檔案,這個標頭檔案包含我們不會經常改變的

程式碼和其他的標頭檔案,然後我們用這個標頭檔案來生成一個預編譯標頭檔案(.pch檔案)

想必大家都知道 StdAfx.h這個檔案。很多人都認為這是VC提供的一個“系統級別”的

,編譯器帶的一個頭檔案。其實不是的,這個檔案可以是任何名字的。我們來考察一個

典型的由AppWizard生成的MFC Dialog Based 程式的預編譯標頭檔案。(因為AppWizard

會為我們指定好如何使用預編譯標頭檔案,預設的是StdAfx.h,這是VC起的名字)。我們

會發現這個標頭檔案裡包含了以下的標頭檔案:

#include <afxwin.h> // MFC core and standard components

#include <afxext.h> // MFC extensions

#include <afxdisp.h> // MFC Automation classes

#include <afxdtctl.h> // MFC support for Internet Explorer 4

Common Controls

#include <afxcmn.h>

這些正是使用MFC的必須包含的標頭檔案,當然我們不太可能在我們的工程中修改這些頭文

件的,所以說他們是穩定的。

那麼我們如何指定它來生成預編譯標頭檔案。我們知道一個頭檔案是不能編譯的。所以我

們還需要一個cpp檔案來生成.pch 檔案。這個檔案預設的就是StdAfx.cpp。在這個檔案

裡只有一句程式碼就是:#include “Stdafx.h”。原因是理所當然的,我們僅僅是要它能

夠編譯而已?D?D?D也就是說,要的只是它的.cpp的副檔名。我們可以用/Yc編譯開關來指

定StdAfx.cpp來生成一個.pch檔案,通過/Fp編譯開關來指定生成的pch檔案的名字。打

開project ->Setting->C/C++ 對話方塊。把Category指向Precompiled Header。在左邊的

樹形視圖裡選擇整個工程 

Project Options(右下角的那個白的地方)可以看到 /Fp “debug/PCH.pch”,這就是指

定生成的.pch檔案的名字,預設的通常是 <工程名>.pch(我的示例工程名就是PCH)。

然後,在左邊的樹形視圖裡選擇StdAfx.cpp.//這時只能選一個cpp檔案!

這時原來的Project Option變成了 Source File Option(原來是工程,現在是一個檔案

,當然變了)。在這裡我們可以看到 /Yc開關,/Yc的作用就是指定這個檔案來建立一個

Pch檔案。/Yc後面的檔名是那個包含了穩定程式碼的標頭檔案,一個工程裡只能有一個文

件的可以有YC開關。VC就根據這個選項把 StdAfx.cpp編譯成一個Obj檔案和一個PCH檔案

然後我們再選擇一個其它的檔案來看看,//其他cpp檔案

在這裡,Precomplier 選擇了 Use &8943;&8943;&8943;一項,標頭檔案是我們指定建立PCH 檔案的stda

fx.h

檔案。事實上,這裡是使用工程裡的設定,(如圖1)/Yu”stdafx.h”。

這樣,我們就設定好了預編譯標頭檔案。也就是說,我們可以使用預編譯頭功能了。以

下是注意事項:

1):如果使用了/Yu,就是說使用了預編譯,我們在每個.cpp檔案的最開頭,我強調一遍

是最開頭,包含 你指定產生pch檔案的.h檔案(預設是stdafx.h)不然就會有問題。如

果你沒有包含這個檔案,就告訴你Unexpected file end. 如果你不是在最開頭包含的,

你自己試以下就知道了,絕對有很驚人的效果&8943;..

fatal error C1010: unexpected end of file while looking for precompiled

header directive

Generating Code...

2)如果你把pch檔案不小心丟了,編譯的時候就會產生很多的不正常的行為。根據以上

的分析,你只要讓編譯器生成一個pch檔案。也就是說把 stdafx.cpp(即指定/Yc的那個

cpp檔案)從新編譯一遍。當然你可以傻傻的 Rebuild All。簡單一點就是選擇那個cpp

檔案,按一下Ctrl + F7就可以了。不然可是很浪費時間的。

例如:

加了一個對話方塊類檔案,重新編譯後出現編譯錯誤: 
d:\center\lkdraw\codlg.cpp(4)   :   fatal   error   C1083:   Cannot   open   precompiled   header   file:   'Debug/LkDraw.pch':   No   such   file   or   directory 
codlg.cpp   (4)行是如下語句:#include   "stdafx.h" 
但我的stdafx.h   檔案明明在,而且其它的對話方塊檔案一樣的寫法卻沒錯誤。 
請問如何解決? 

在選單project-settings-c/c++   中的Project   Options   中把/Fp"Debug/LkDraw.pch"刪掉,成功搞定。 

相關推薦

C++】 編譯檔案

許多初學 VC 的朋友也許都為那麼一個問題困擾過:     為什麼所有的 cpp 都必須 #include "stdafx.h"     也許請教了別的高手之後,他們會告訴你,這是預編譯頭,必須包含。可是,這到底 是為什麼呢?預編譯頭有什麼用呢?     這得從標頭檔案的

c++編譯檔案問題

環境:VS2008 語言:C++      下午出了一個非常可惡的問題,我的一個基於MFC 對話方塊的程式因為預編譯標頭檔案stdafx.h的原因始終無法編譯通過。 由於程式整體是需要預編譯標頭檔案的。因此工程內所有cpp檔案通通都包括了#include stdafx.h。      我自己寫的檔案放在工程

VSc++檔案呼叫c 函式 ,fatal error C1853 編譯檔案來自編譯器的早期版本,或者編譯C++ 而在 C 使用它(或相反)

出現錯誤:error C1853: “Debug\ConsoleApplication1.pch”預編譯標頭檔案來自編譯器的早期版本,或者預編譯頭為 C++ 而在 C 中使用它(或相反) 相關資料:

fatal error C1853 編譯檔案來自編譯器的早期版本,或者編譯C++ 而在 C 使用它(或相反)

當 Visual C++ 專案啟用了預編譯頭 (Precompiled header) 功能時,如果專案中同時混合有 .c 和 .cpp 原始檔,則可能收到 C1853 編譯器錯誤:fatal error C1853: 'pjtname.pch' precompiled header file is fro

VS關於編譯檔案的介紹

預編譯標頭檔案的原理: 在DXUT.cpp裡include一次DXUT.h,生成一次pch,pdb檔案,其他地方實際上直接用這個編譯的結果,從而減少編譯時間,提高編譯效率。一般,我們把常用的不變的庫標頭檔案放裡面,如,atlbase.h,atlcore.h,window

GCC使用編譯檔案

既使用過 Microsoft? Visual C++? 又使用過 GNU CC 的網友一定會感受到兩者編譯速度的差異,尤其是對於 wxWidgets 這樣標頭檔案內容多

C++編譯檔案

許多初學 VC 的朋友也許都為那麼一個問題困擾過:    為什麼所有的 cpp 都必須 #include "stdafx.h"    也許請教了別的高手之後,他們會告訴你,這是預編譯頭,必須包含。可是,這到底是為什麼呢?預編譯頭有什麼用呢?    這得從標頭檔案的編譯原理講起

C++佇列(檔案queue)常用函式

使用該標頭檔案: #include <queue> push(): 佇列中是先進先出,push即在隊尾插入一個元素。 pop(): 將佇列中最靠前位置的元素拿掉,是沒有返回值的void函式。 size(): 返回佇列中元素的個數,返回值型別為unsigne

錯誤:fatal error C1083: 無法開啟編譯檔案:“Debug/DistanceMeasure.pch”: No such file or directory

錯誤:fatal error C1083: 無法開啟預編譯標頭檔案:“Debug/DistanceMeasure.pch”: No such file or  directory  這種錯誤是不存在預編譯的.pch檔案,即沒有建立。 網上各種方法都是不使用預編譯,其實這樣

關於Visual Studio的編譯檔案

使用Visual Studio很久了,關於這個細節今天終於算弄清楚了,記錄一下。使用Visual Studio或其他IDE學習C++時,即便是最簡單的hello world的控制檯程式,首先也要新建一個工程,而不能直接用記事本新建個字尾為cpp的文字檔案,然後一條命令(比如c

編譯 #include"編譯檔案"為何要放在第一句

vs2010 預編譯頭 jiese1990 預編譯頭原理 你有兩個檔案a.cpp和b.cpp,都包含了同一個標頭檔案c.h。那麼正常的流程是:將c.h和a.cpp合併,編譯成a.obj;將c.h和b

C++為什麼要檔案和原始檔分開寫呢?

對c&c++程式來說,基本上來說都是要把原始檔和標頭檔案分別編寫。一般都是代表一個基本功能的原始檔引用相應的標頭檔案。 一個 相關功能的模組可能有若干對原始檔和標頭檔案組成。這是基於元件程式設計的核心。 在我看來,他的好處是巨大的,是java不可比擬的,也是

C++stdlib.h檔案介紹

stdlib標頭檔案即standard library標準庫標頭檔案,stdlib標頭檔案裡包含了C、C++語言的最常用的系統函式,該檔案包含了C語言標準庫函式的定義,stdlib.h中定義了物種型別:一些巨集和通用工具函式。型別如:size_t、wchar_t、div_t

Xcode-工程新增編譯檔案Prefix.pch

人生苦短,道阻且艱;修行不易,且行且努力。 【專業擅長領域】:iOS開發,遊戲開發,圖形學 【擅長平臺】:iOS平臺,Unity --------------------------------------------------------- 【個人主頁】:信厚

編譯檔案的作用和使用方法介紹

預編譯頭的概念: 所謂的預編譯頭就是把一個工程中的那一部分程式碼,預先編譯好放在一個檔案裡(通常是以.pch為副檔名的),這個檔案就稱為預編譯標頭檔案這些預先編譯好的程式碼可以是任何的C/C++程式碼--------甚至是inline的函式,但是必須是穩定的,在工程開發的過

無法寫入編譯檔案,由於 IO 裝置錯誤,無法執行此項請求的錯誤的解決

作者:朱金燦        早上檢視伺服器每日構建的情況,發現出現一個詭異的錯誤: fatal error C1085: 無法寫入預編譯標頭檔案:“E:\workspace\MyApp\Intdir\D

無法開啟編譯檔案的解決方法及編譯原理[ZZ]

1。用VC.NET編輯程式,按Ctrl+F7,出現下列錯誤: fatal error C1083: 無法開啟預編譯標頭檔案:“Debug/UGFace.pch”: No such file or  directory   解決方法:修改:專案->屬性->C/C

GCC:編譯檔案的嘗試

    公司開發了一個自己的基礎類庫,有著龐大的標頭檔案。為了便於使用並提高編譯速度,嘗試了一下GCC的預編譯標頭檔案的功能:1、先定義標頭檔案afl.h,內容如下:(afl意味a framework library) #ifndef _AFL_H_#define _AFL_

gcc如何生成編譯檔案(.gch)

1 建立comm.h 2 main.c中包含comm.h : #include "comm.h" 3 gcc -o comm.h.gch comm.h(低版本gcc會有bug) 4 gcc main.

fatal error C1083: 無法開啟編譯檔案 的解決方法

在VS中移植工程,尤其是含有StdAfx.h和StdAfx.cpp這兩個檔案的工程,重新編譯時常發生“fatal error C1083: 無法開啟預編譯標頭檔案”的錯誤。如何解決呢?下面以VS2010為例說明解決步驟 1. 在解決方案資源管理器中,工程名上點右鍵,選擇“屬