1. 程式人生 > >關於Visual Studio的預編譯標頭檔案

關於Visual Studio的預編譯標頭檔案

使用Visual Studio很久了,關於這個細節今天終於算弄清楚了,記錄一下。

使用Visual Studio或其他IDE學習C++時,即便是最簡單的hello world的控制檯程式,首先也要新建一個工程,而不能直接用記事本新建個字尾為cpp的文字檔案,然後一條命令(比如cc)就完成了的,那麼新建工程時就有下面3種類型:

1、預設狀態下

這時候預設預編譯頭,生成的檔案結構如下:

2、取消勾選Precompiled header

完成後檔案結構與之前完全相同,檔案內容也相同,那麼這兩種型別到底有什麼區別呢?

不同點在於第二種狀態下,stdafx.h和stdafx.cpp是可以刪除的(當然會提示型別未定義,因為刪掉了#include <tchar.h>,把main函式頭改為int main()即可)。預設狀態下則不能刪除,連線時報錯。

       繼續深究的話,其根本原因在於這個:勾選Precompiled header時編譯器認為,所有在指令#include "stdafx.h"前的程式碼都是預編譯的,它跳過#include "stdafx. h"指令,使用projectname.pch編譯這條指令之後的所有程式碼。

基於這一點,預設狀態下,我們在#include "stdafx. h"前使用#include <iostream>不會生效,而第二種情況則可以生效。實際上就是兩種狀態下編譯器對#include "stdafx. h"執行不同的操作。預設狀態下預先編譯stdafx. h裡的內容,並生成pch檔案,跳過#include "stdafx. h"指令,使用projectname.pch編譯這條指令之後的所有程式碼。而取消勾選則與自己編寫的標頭檔案作用相同,僅僅是將stdafx. h標頭檔案包含進來,不進行預編譯。

3、最後一種就是勾選空工程了,這種就不再贅訴,直接在Source Files目錄下新增自己的cpp檔案,Header Files目錄下新增自己的標頭檔案即可。

相關推薦

關於Visual Studio編譯檔案

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

錯誤: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。      我自己寫的檔案放在工程

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

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

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

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

【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自己的

C++編譯檔案

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

error無法開啟編譯檔案的解決方法及編譯原理

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

cmake管理visual studio無法顯示檔案解決方法

原因 我們的跨平臺專案使用cmake來管理的,但是windows下的小夥伴發現在visual studio上標頭檔案沒有載入進來,