關(guān)于include "stdafx.h"

Standard Application Frame Extend沒有函數(shù)庫,只是定義了一些環(huán)境參數(shù)趋厉,使得編譯出來的程序能在32位的操作系統(tǒng)環(huán)境下運行。Windows和MFC的include文件都非常大享完,即使有一個快速的處理程序霞揉,編譯程序也要花費相當長的時間來完成工作轻庆。由于每個.CPP文件都包含相同的include文件,為每個.CPP文件都重復處理這些文件就顯得很傻了敛劝。為避免這種浪費余爆,AppWizard和VisualC++編譯程序一起進行工作,如下所示:

1.AppWizard建立了文件stdafx.h夸盟,該文件包含了所有當前工程文件需要MFCinclude文件蛾方。且這一文件可以隨被選擇的選項而變化。

2.AppWizard然后就建立stdafx.cpp满俗。這個文件通常都是一樣的转捕。

3.然后AppWizard就建立起工程文件作岖,這樣第一個被編譯的文件就是stdafx.cpp唆垃。

4當VisualC++編譯stdafx.cpp文件時,它將結(jié)果保存在一個名為stdafx.pch的文件里痘儡。(擴展名pch表示預編譯頭文件辕万。)(預編譯頭文件通過編譯stdafx.cpp生成,以工程名命名沉删,由于預編譯的頭文件的后綴是“pch”渐尿,所以編譯結(jié)果文件是projectname.pch。)

5.當VisualC++編譯隨后的每個.cpp文件時矾瑰,它閱讀并使用它剛生成的.pch文件砖茸。

VisualC++不再分析Windows include文件,除非你又編緝了stdafx.cpp或stdafx.h殴穴。這個技術(shù)很精巧凉夯,你不這么認為嗎?(還要說一句采幌,Microsoft并非是首先采用這種技術(shù)的公司劲够,Borland才是。)在這個過程中你必須遵守以下規(guī)則:

1.你編寫的任何.cpp文件都必須首先包含stdafx.h休傍。

2.如果你有工程文件里的大多數(shù).cpp文件需要.h文件征绎,順便將它們加在stdafx.h(后部)上,然后預編譯stdafx.cpp.

3.由于.pch文件具有大量的符號信息磨取,它是你的工程文件里最大的文件人柿。

如果你的磁盤空間有限,你就希望能將這個你從沒使用過的工程文件中的.pch文件刪除忙厌。執(zhí)行程序時并不需要它們顷扩,且隨著工程文件的重新建立,它們也自動地重新建立(2)stdafx.h文件中包含了一些必要的頭文件(如afxwin.h)慰毅,對應于stdafx.h有一個stdafx.cpp文件隘截,該文件內(nèi)包含一句:#include "stdafx.h",其作用是令編譯器編譯出一個stdafx.obj預編譯頭文件(pre-compile header,需要設置編譯選項)婶芭,在下次編譯時以降低總的編譯時間东臀。若使用ClassWizard定義新類,則有可能在stdafx.h中增加新的include files犀农。比如惰赋,若選用MFC template classes,stdafx.h中便會增加:#include呵哨。(3)注:1.afxwin.h是MFC編程的必需文件赁濒,其中包含如CString,CEdit類運行所必需的頭文件孟害,最好保證該句在頭文件首行拒炎;它還會調(diào)用windows.h,改頭文件包含有數(shù)據(jù)類型的定義挨务、API入口點定義和其它有用的參數(shù)信息击你;

2.非MFC工程使用MFC庫時最常見的問題就是windows.h重復包含錯誤:fatal error C1189: #error : WINDOWS.H already included. MFC apps

must not #include;

3.#define

WIN32_LEANAND_MEAN谎柄,在windows的頭文件中拒絕接受MFC類庫丁侄,以加速編譯時間;4.afx - afx中的af指的是Application

Frame的縮寫朝巫,曾經(jīng)有一個技術(shù)開發(fā)團隊專門作Application Frame鸿摇,后來給這個團隊命名用afx,x本身沒有含義劈猿,只不過構(gòu)成一個響亮的口號拙吉,后來就一直沿用下來。

5.建立了一個新的空的工程,項目中的stdafx.cpp使用的是Create Precompiled Header

(/Yc)糙臼,而其它.cpp是用的Use Precompiled

Header (/Yu)庐镐,并且Create/Use PCH Trhough File是stdafx.h

(4)stdafx是預編譯頭文件。你可以從VC++集成環(huán)境菜單Project/Settings...中Project Settings

Dialog/C/C++/Category:Precompiled Headers/Use precompiled header file(.pch)的Check Box中看到变逃。已經(jīng)將Stdafx.h文件作為預編譯的頭文件來使用必逆。預編譯頭文件是在編譯所有Code之前,首先進行的動作揽乱。通過解析這個文件名眉,取得定義的結(jié)構(gòu)和參數(shù)。這樣就不用在編譯每個文件時都重新進行解析凰棉。提高編譯速度损拢。stdafx.h這個名稱是可以改變的,你可以指定預編譯頭文件的名稱撒犀。這個只在vc中有用,并不是c++的特性,vc中可以在這里聲明全局變量和ID的地方(5) fatal error C1083: Cannot openinclude file: 'stdafx.h': No such file or directory

A如果根本沒有stdafx.h,你為何要包含它.一般只有大工程才需要預編譯頭文件.stdafx.h

刪除這一行#include"stdafx.h"

B project->

Settings->c/c++ category->Precomiled Headers選擇第一個Not usingprecompiled headers

C

Project->Settings->C/C++->Project Options中把/Fp"Debug/Your_Project_Name.pch"和/Yu"stdafx.h"兩項刪掉就可以了福压。要注意原來在stdafx.h內(nèi)包含的文件要包含到各個.cpp文件中.

D在*.cpp中的開頭加入#include "stdafx.h".(#include "stdAfx.h"放到另外#include的前面掏秩,也就是程序的最前面。使用預編譯頭文件需要把它放到程序最前面荆姆,否則它前面的內(nèi)容會被忽略)

E rebuild all

(6)設置了預編譯蒙幻,如果不加#include

"stdafx.h",就會報這個錯:fatal error C1010:

unexpected end of

file while looking for precompiled header directive。編譯器通過一個頭文件stdafx.h來使用預編譯頭文件胆筒。stdafx.h這個頭文件名是可以在project的編譯設置里指定的邮破。編譯器認為,所有在指令#include "stdafx.h"前的代碼都是預編譯的仆救,它跳過#include

"stdafx. h"指令抒和,使用projectname.pch編譯這條指令之后的所有代碼。因此彤蔽,所有的CPP實現(xiàn)文件第一條語句都是:#include "stdafx.h"摧莽。

9999999???VaP?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铆惑,隨后出現(xiàn)的幾起案子范嘱,更是在濱河造成了極大的恐慌送膳,老刑警劉巖员魏,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叠聋,居然都是意外死亡撕阎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門碌补,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虏束,“玉大人,你說我怎么就攤上這事厦章≌蛟龋” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵袜啃,是天一觀的道長汗侵。 經(jīng)常有香客問我,道長群发,這世上最難降的妖魔是什么晰韵? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮熟妓,結(jié)果婚禮上雪猪,老公的妹妹穿的比我還像新娘。我一直安慰自己起愈,他們只是感情好只恨,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布译仗。 她就那樣靜靜地躺著,像睡著了一般官觅。 火紅的嫁衣襯著肌膚如雪古劲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天缰猴,我揣著相機與錄音产艾,去河邊找鬼。 笑死滑绒,一個胖子當著我的面吹牛闷堡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疑故,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼杠览,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纵势?” 一聲冷哼從身側(cè)響起踱阿,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钦铁,沒想到半個月后软舌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡牛曹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年佛点,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黎比。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡超营,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阅虫,到底是詐尸還是另有隱情演闭,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布颓帝,位于F島的核電站米碰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏躲履。R本人自食惡果不足惜见间,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望工猜。 院中可真熱鬧米诉,春花似錦、人聲如沸篷帅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惊橱,卻和暖如春蚪腐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背税朴。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工回季, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人正林。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓泡一,卻偏偏與公主長得像,于是被迫代替她去往敵國和親觅廓。 傳聞我的和親對象是個殘疾皇子鼻忠,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 最近為了給xmake實現(xiàn)預編譯頭文件的支持,研究了下各大主流編譯器處理預編譯頭的機制以及之間的一些差異杈绸。 現(xiàn)在的大...
    waruqi閱讀 1,586評論 0 51
  • /* #ifndef _STDAFX_H #define _STDAFX_H #include //cin...
    spaceX閱讀 2,534評論 0 0
  • 前言 最近在學習#pragma編譯指令相關(guān)的知識帖蔓,網(wǎng)上也有很多文章介紹各個指令的用法,但是在網(wǎng)上搜到的對#prag...
    小豬啊嗚閱讀 7,082評論 1 8
  • 概述:聲明是將一個名稱引入一個程序.定義提供了一個實體在程序中的唯一描述.聲明在單個作用域內(nèi)可以重復多次(類成員除...
    抓兔子的貓閱讀 625評論 0 3
  • 別人的文章文采逸然瞳脓,思維嚴謹塑娇,別人的文章積極樂觀,正能量滿滿篡殷,而我發(fā)現(xiàn)我每次記錄的東西更多是我內(nèi)心的不安钝吮,焦...
    冬冬小眠閱讀 296評論 0 0