stdafx h和targetver h的作用

2021-08-10 06:26:37 字數 3097 閱讀 8354

stdafx.h和targetver.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編譯這條指令之後的所有**.因此,所有的mfc實現檔案第一條語句都是:#include 「stdafx.h」

stdafx.h中沒有函式庫,只是定義了一些環境引數,使得編譯出來的程式能在32位的作業系統環境下執行。

#include // mfc core and standard components

#include // mfc extensions

#include // mfc ole classes

#include // mfc ole dialog classes

#include // mfc automation classes

。(4)當visualc++編譯stdafx.cpp檔案時,它將結果儲存在乙個名為stdafx.pch的檔案裡。

(副檔名pch表示預編譯標頭檔案。)

(5)當visualc++編譯隨後的每個.cpp檔案時,它閱讀並使用它剛生成的.pch檔案。visualc++不再分析                                     windowsinclude檔案,除非你又編輯了stdafx.cpp或stdafx.h。

這個技術很精巧,你不這麼認為嗎?(還要說一句,microsoft並非是首先採用這種技術的公司,borland才是。)在這個過程中你必須遵守以下規則:

◎你編寫的任何.cpp檔案都必須首先包含stdafx.h。

◎由於.pch檔案具有大量的符號資訊,它是你的工程檔案裡最大的檔案。

如果你的磁碟空間有限,你就希望能將這個你從沒使用過的工程檔案中的.pch檔案刪除。執行程式時並不需要它們,且隨著工程檔案的重新建立,它們也自動地重新建立。

stdafx.h檔案中包含了一些必要的標頭檔案(如afxwin.h),對應於stdafx.h有乙個stdafx.cpp檔案,該檔案內包含一句:#include 「stdafx.h」,其作用是令編譯器編譯出乙個stdafx.obj預編譯標頭檔案(pre-compile header,需要設定編譯選項),在下次編譯時以降低總的編譯時間。若使用classwizard定義新類,則有可能在stdafx.h中增加新的 include files。比如,若選用mfc template classes,stdafx.h中便會增加:#include 。

注:1.afxwin.h是mfc程式設計的必需檔案,其中包含如cstring,cedit類執行所必需的標頭檔案,最好保證該句在標頭檔案首行;它還會呼叫windows.h,改標頭檔案包含有資料型別的定義、api入口點定義和其它有用的引數資訊。

3.#define win32_leanand_mean,在windows的標頭檔案中拒絕接受mfc類庫,以加速編譯時間;

5.#if _msc_ver > 1000                      //表示版本

#pragma once                             //避免標頭檔案之間的相互包含

#endif // _msc_ver > 1000

6.建立了乙個新的空的工程,專案中的stdafx.cpp使用的是createprecompiled header (/yc),而其它.cpp是用的use precompiled header (/yu),並且create/use pchtrhough file都是stdafx.h

與stdio.h的區別

我們一般用tc或vc編譯c程式的時候都要首先包含這個stdio.h標頭檔案,這個標頭檔案裡面包含了scanf和printf函式的定義,如果我們不在程式開頭include這個檔案,那麼你呼叫上面這兩個函式就不會成功,它其實和c++中的iostream.h檔案的作用差不多的,它們一般都已經在stdafx.h檔案中被包含。

定義程式執行的環境,如限制程式只能在xp下執行,限制程式在只能在vin7下執行,或限制程式只能在xp以上系統執行,或限制程式只能在server2003以上系統執行…

用法:

#ifndef winver                    //程式中沒有定義winver巨集時

#define winver 0x0600            // 

定義winver為0x0600 //0x0600表示windows vista

#endif

#ifndef _win32_winnt             // 程式中沒有定義_win32_winnt巨集時

#define _win32_winnt 0x0600     // 定義_win32_winnt為0x0600    //0x0600表示windows vista

#endif

附: 

0×0500 表示windows 2000,

0×0501為windows xp,

0×0502為windows server 2003,

0×0600 為windows vista。

參考文獻

[1][2]

」stdafx h」的用途和用法

用法 在mfc程式,cpp檔案,放在第一行。注意 include stdafx.h 一定要放在第一行,否則可能會引發不可知的各種災難性錯誤。用處 stdafx.h中沒有函式庫,只是定義了一些環境引數,使得編譯出來的程式能在32位的作業系統環境下執行。windows和mfc的include檔案都非常大...

stdafx h和targetver h的作用

stdafx.h和targetver.h的作用 所謂標頭檔案預編譯 就是把乙個工程 project 中使用的一些mfc標準標頭檔案 如windows.h afxwin.h 預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。預編譯標頭檔案通過編譯...

stdafx h和targetver h的作用

stdafx.h和targetver.h的作用 所謂標頭檔案預編譯,就是把乙個工程 project 中使用的一些mfc標準標頭檔案 如windows.h afxwin.h 預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。定義程式執行的環境,如...