1. 程式人生 > >預編譯頭 #include"預編譯標頭檔案"為何要放在第一句

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

vs2010 預編譯頭 jiese1990

預編譯頭原理

你有兩個檔案a.cpp和b.cpp,都包含了同一個標頭檔案c.h。那麼正常的流程是:將c.h和a.cpp合併,編譯成a.obj;將c.h和b.cpp合併,編譯成b.obj;最後將a.obj和b.obj連結成可執行檔案。
標頭檔案c.h的內容實際上被解析了兩遍。那幹嘛不把c.h解析好了儲存成臨時檔案,用時讀入!預編譯頭就是這個原理:把 預編譯標頭檔案 事先編譯成一種二進位制的中間格式,供後續的編譯過程使用。
如果預編譯頭所涉及的部分不發生改變的話,在隨後的編譯過程中此部分不重新進行編譯。

每一個cpp檔案裡都必須#include”預編譯標頭檔案”

在cpp裡沒有#include”預編譯標頭檔案”時:
報錯:fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source?(StdAfx.h是我的預編譯標頭檔案)

#include”預編譯標頭檔案”指令必須載入第一句

所有在指令 #include "預編譯標頭檔案" 前的程式碼都是預編譯的, 它跳過 #include "預編譯標頭檔案"指令 及 此指令之前的指令,使用.pch編譯這條指令之後的所有程式碼。
(在vs裡建立工程預設使用stdafx.h為預編譯標頭檔案)
也就是說在一個jiese.cpp檔案裡
#include ”jiese.h”
#inlcude “stdafx.h”
這兩句相當於只有一句#inlcude “stdafx.h”, #include ”jiese.h”指令不會被編譯
生成預編譯標頭檔案是很耗時間的。同時你得注意預編譯標頭檔案通常很大。
它們都是編譯器之間不相容的^_^,就是說你不能把VC生成的預編譯頭拿到GCC上去用。
vs2010預編譯頭設定方法,工程屬性視窗

預編譯頭生成檔案


相關推薦

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

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

編譯驅動找不到檔案

有時候編譯一些驅動時,提示一些標頭檔案無法找到,是因為在source中並沒有包含該標頭檔案的路徑。具體需修改source檔案,如: INCLUDES=$(INCLUDES);/../../../inc;./;D:/WINCE600/PLATFORM/COMMON/SRC/SO

include怎麼關聯檔案檔案如何關聯原始檔?檔案被重複包含的危害?怎麼防止重複包含?

標頭檔案(.h)的功能是一般用來進行宣告的(函式,類或變數引用,巨集定義)。 原始檔(.cpp)是用來進行定義的(函式,類定義,變數定義)。 #include 是在編譯器進行編譯之前,即在預編譯時把它後面所寫的那個標頭檔案的內容,完完整整地、 一字不改地包含到當前的原始檔中來。 &nbs

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

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

c++中的編譯檔案問題

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

關於Visual Studio的編譯檔案

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

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

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

解決vs2010檔案stdatx.h編譯問題

stdatx.h是一個C++的標頭檔案 //下面是百度百科的解釋,關羽stdatx.h檔案,他是MFC的標頭檔案 名稱的英文全稱為:Standard Application Framework Extensions 所謂標頭檔案預編譯,就是把一個工程(Project)中使用

【C++】 編譯檔案

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

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

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

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

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

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

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

VS中關於編譯檔案的介紹

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

無法寫入編譯檔案,由於 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. 在解決方案資源管理器中,工程名上點右鍵,選擇“屬

GCC中使用編譯檔案

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

編譯檔案PCH

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