Visual C++中 #include stdafx.h 頭文件的用法

今天在做VC++實驗時,總是出現莫名其妙的錯誤。比如說:

unexpected end of file whilelooking for precompiled header directive

???再比如說這么一大串:

mainframe.cpp 有錯誤\firstdlg.h(21) :error C2065: 'IDD_DIALOG_FIRST' : undeclared identifier
mainframe.cpp 有錯誤\firstdlg.h(21) : error C2057: expected constantexpression
mainframe.cpp 有錯誤\seconddlg.h(21) : error C2065:'IDD_DIALOG_SECOND' : undeclared identifier
mainframe.cpp 有錯誤\seconddlg.h(21) : error C2057: expected constantexpression
MainFrame.cpp 有錯誤\MainFrm.cpp(25) : error C2065: 'ID_TEST_DLG' :undeclared identifier
MainFrame.cpp 有錯誤\MainFrm.cpp(26) : error C2065: 'ID_TEST_DLG1' :undeclared identifier
MainFrame.cpp 有錯誤\MainFrm.cpp(58) : error C2065: 'IDR_MAINFRAME' :undeclared identifier

??研究了好久,終于發現了錯誤原因,原來全都是#include "stdafx.h" 搞的鬼。

?? #include"stdafx.h" 必須是所有的CPP實現文件第一條語句,由系統自動生成。

?? stdafx.h(Standard Application Framework Extensions ): 標準系統包含文件的包含文件。
?? Microsoft C 和 C++編譯器提供了用于預編譯任何 C 或 C++代碼(包括內聯代碼)的選項。利用此性能特性,可以編譯穩定的代碼體,將已編譯狀態的代碼存儲在文件中,以及在隨后的編譯中,將預編譯的代碼與仍在開發的代碼結合起來。由于不需要重新編譯穩定代碼,因此后面每次編譯的速度都要快一些。
??預編譯代碼有助于在開發周期中縮短編譯時間,特別是在以下情況中:
?? 一:總是使用不經常改動的大型代碼體。
??二:程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。
?? 三:用于創建預編譯頭文件的第一次編譯所花費的時間比后面的編譯稍長一些。通過包含預編譯代碼可以加快后面的編譯速度。C 和 C++程序都可以預編譯。在 C++編程中,常見的做法是將類接口信息分別放到不同的頭文件中。此后就可以將這些頭文件包含在使用該類的程序中。通過預編譯這些頭文件,可以縮短程序的編譯時間。
??VC創建項目時自動創建的預編譯頭文件,在編譯其他文件之前,VC先預編譯此文件。頭文件stdafx.h引入了項目中需要的一些通用的頭文件,比如window.h等,在自己的頭文件中包括stdafx.h就包含了那些通用的頭文件。
??所謂頭文件預編譯,就是把一個工程(Project)中使用的一些MFC標準頭文件(如Windows.H、Afxwin.H)預先編譯,以后該工程編譯時,不再編譯這部分頭文件,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。
??預編譯頭文件通過編譯stdafx.cpp生成,以工程名命名,由于預編譯的頭文件的后綴是“pch”,所以編譯結果文件是projectname.pch。
??編譯器通過一個頭文件stdafx.h來使用預編譯頭文件。stdafx.h這個頭文件名是可以在project的編譯設置里指定的。編譯器認為,所有在指令#include"stdafx.h"前的代碼都是預編譯的,它跳過#include "stdafx.h"指令,使用projectname.pch編譯這條指令之后的所有代碼。
?? 因此,所有的CPP實現文件第一條語句都是:#include"stdafx.h"。

?? #include"stdafx.h"如果不小心刪了,就會有第一種錯誤;

?? #include"stdafx.h" 如果沒有在第一句,就會出現第二種錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458735.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mac顯示無法連接adobe服務器,Mac安裝Adobe軟件,如遇Error提示解決方法

Mac10.15.3 安裝Adobe Photoshop 2020的時候一直提示Error錯誤The installation cannot continue as the installer file may be damaged. Download the installer file again.看到這種問題,一般第一想法就是安裝包損壞了,本能的會再下載一遍甚至多遍&am…

android開發中EditText自動獲取焦點時隱藏hint的代碼

只需讓EditText設置以下的OnFocusChangeListener就可以了 private OnFocusChangeListener mOnFocusChangeListener new OnFocusChangeListener() {Overridepublic void onFocusChange(View v, boolean hasFocus){EditText textView (EditText)v;String hint;if (hasFocus) {h…

Grovvy初識

1.Groovy和Java對比 Groovy的松散的語法允許省略分號和修飾符除非另行指定,Grovvy的所有內容都為publicGrovvy允許定義簡單腳本,同時無需定義正規的class對象Grovvy在普通的常用java對象上增加了一些獨特的方法和快捷方式,使得他們更容易使用…

C和C++混合編程(__cplusplus使用)

第一種理解 比如說你用C開發了一個DLL庫,為了能夠讓C語言也能夠調用你的DLL輸出(Export)的函數,你需要用extern "C"來強制編譯器不要修改你的 函數名。 通常,在C語言的頭文件中經常可以看到類似下面這種形式的代碼: …

$.ajax 同步一不,ajax 同步不生效

可以用的生效代碼注意 boolean 的位置var baseUrl ${pageContext.request.contextPath };function formcheck(){var flag false;var customerNameaa;var countryaa;var citybeijing;$.ajax({type: POST,url:baseUrl "/exports/credit/findBuyersBySerach",data:{&…

iOS工程中創建pch文件

1.新建pch類文件 2.在工程配置中,Build Setting 下搜索"pre"尋找Apple LLVM6.1 - Language下的 Preflx Header 3.點開Preflx Header 把左邊pch類拖拽進去 4.把/"工程名"/....前邊的內容全部換為$(SRCROOT) (具體替換內容看報錯自己靈活運用)轉載于:https:/…

批處理中setlocal enabledelayedexpansion的作用詳細整理

設置本地為延遲擴展。其實也就是:延遲變量,全稱延遲環境變量擴展, 想進階,變量延遲是必過的一關!所以這一部分希望你能認真看。 為了更好的說明問題,我們先引入一個例子。 例1: echo off set a4 set a5&echo…

一個服務器多個網站多個域名,多個域名一個服務器嗎

多個域名一個服務器嗎 內容精選換一換PAS(Primary Application Server):主應用服務器。AAS(Additional Application Server):擴展應用服務器。ASCS(ABAP Central Services):SAP應用核心服務,是SAP應用的一個核心控件,包…

iframe 子父窗口互掉 js

一、父窗口調用iframe子窗口方法 1、HTML語法&#xff1a;<iframe name"myFrame" src"child.html"></iframe> 2、父窗口調用子窗口&#xff1a;myFrame.window.functionName(); 3、子窗品調用父窗口&#xff1a;parent.functionName(); 簡單地…

yii2 ajax分頁,Yii框架分頁技術實例分析

本文實例講述了Yii框架分頁技術。分享給大家供大家參考&#xff0c;具體如下&#xff1a;直接上代碼&#xff1a;1.首先寫控制器層先引用pagination類use yii\data\Pagination;寫自己的方法:function actionFenye(){$data Field::find(); //Field為model層,在控制器剛開始use了…

Spring源碼解析——如何閱讀源碼

閱讀目錄 下面看一下如何使用jar包以及源碼的source包  下面給出一個簡單的spring樣例  如何閱讀源碼最近沒什么實質性的工作&#xff0c;正好有點時間&#xff0c;就想學學別人的代碼。也看過一點源碼&#xff0c;算是有了點閱讀的經驗&#xff0c;于是下定決心看下spring…

c++多線程編程

一直對多線程編程這一塊很陌生&#xff0c;決定花一點時間整理一下。 os:ubuntu 10.04 c 1.最基礎&#xff0c;進程同時創建5個線程&#xff0c;各自調用同一個函數 [html] view plaincopy #include <iostream> #include <pthread.h> //多線程相關操作頭文件&am…

ajax當頁post請求,tag落地頁--通過ajax-post請求數據

查詢所有tag及其對應跳轉鏈接$tags get_tags(array(get>all));$output . ;if($tags) {foreach ($tags as $tag):$output . . $tag->name .;endforeach;} else {_e(No tags created., text-domain);}$output . ;echo $output;交互tag查詢image場景如下&#xff0c;通過頁…

GIT的PUSH指令

### GIT的PUSH指令 $ git push <遠程主機名> <本地分支名>:<遠程分支名> * git push命令用于將本地分支的更新&#xff0c;推送到遠程主機。 * 如果省略遠程分支名&#xff0c;則表示將本地分支推送到與之對應的遠程分支&#xff08;通常兩者同名&#xff…

Android 編程下 Touch 事件的分發和消費機制

Android 中與 Touch 事件相關的方法包括&#xff1a;dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev)&#xff1b;能夠響應這些方法的控件包括&#xff1a;ViewGroup、View、Activity。方法與控件的對應關系如下表所…

ios微信本地視頻上傳到服務器,ios本地視頻wx.uploadFile上傳

//上傳視頻uploadVideo:function(){let _this this;let list [camera, album];wx.showActionSheet({itemList: [拍攝視頻,從相冊選擇視頻,從視頻庫選擇視頻],success: function (res) {if(res.tapIndex0 || res.tapIndex1){wx.chooseVideo({sourceType:[list[res.tapIndex]],…

如何手工抓取dump文件及分析

在生產環境下進行故障診斷時&#xff0c;為了不終止正在運行的服務或應用程序&#xff0c;有兩種方式可以對正在運行的服務或應用程序的進程進行分析和調試。 首先一種比較直觀簡潔的方式就是用WinDbg等調試器直接attach到需要調試的進程&#xff0c;調試完畢之后再detach即可。…

Java 類加載機制詳解

2019獨角獸企業重金招聘Python工程師標準>>> 一、類加載器 類加載器&#xff08;ClassLoader&#xff09;&#xff0c;顧名思義&#xff0c;即加載類的東西。在我們使用一個類之前&#xff0c;JVM需要先將該類的字節碼文件&#xff08;.class文件&#xff09;從磁盤…

JAVA vo pojo javabean dto區別

JavaBean 是一種JAVA語言寫成的可重用組件。為寫成JavaBean&#xff0c;類必須是具體的和公共的&#xff0c;并且具有無參數的構造器。JavaBean 通過提供符合一致性設計模式的公共方法將內部域暴露成員屬性。眾所周知&#xff0c;屬性名稱符合這種模式&#xff0c;其他Java 類可…

編寫的windows程序,崩潰時產生crash dump文件的辦法

一、引言 dump文件是C程序發生異常時&#xff0c;保存當時程序運行狀態的文件&#xff0c;是調試異常程序重要的方法&#xff0c;所以程序崩潰時&#xff0c;除了日志文件&#xff0c;dump文件便成了我們查找錯誤的最后一根救命的稻草。windows程序產生dump文件和linux程序產生…