stdafx h的作用以及原理

2021-08-21 08:52:26 字數 1137 閱讀 7481

vc工程裡面經常見到stdafx.h這個標頭檔案,以前也沒有特別注意,但是這個檔案用不好經常會出錯,所以就google了一下,總算是弄清楚了。。。

所謂標頭檔案預編譯,就是把乙個工程(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"。在它前面的所有**將被忽略,所以其他的標頭檔案應該在這一行後面被包含。否則,你將會得到「no such file or directory」這樣讓你百思不得其解的錯誤提示。

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

windows和mfc的include檔案都非常大,即使有乙個快速的處理程式,編譯程式也要花費相當長的時間來完成工作。由於每個.cpp檔案都包含相同的include檔案,為每個.cpp檔案都重複處理這些檔案就顯得很傻了。

◎當visualc++編譯stdafx.cpp檔案時,它將結果儲存在乙個名為stdafx.pch的檔案裡。(副檔名pch表示預編譯標頭檔案。)

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

在這個過程中你必須遵守以下規則:

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

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

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

stdafx h作用及原理

stdafx.h作用及原理 文章分類 c 程式設計 剛剛用vs測試發現,include stdafx.h 後可以不用includeusingnamespace std 了,這驗證了本文最後紅色的那幾段話。不知道 stdafx.h 是怎麼選擇包含其它標頭檔案的,是最常用的?貌似,還可以在它裡面新增新的...

BFC的作用以及原理介紹

內部的box會在垂直方向,乙個接乙個地放置。box垂直方向的距離由margin決定。屬於同乙個bfc的兩個相鄰box的margin會發生重疊。每個元素的margin box的左邊,與包含塊border box的左邊相接觸 對於從左往右的格式化,否則相反 即使存在浮動也是如此。bfc的區域不會與flo...

vue中key的作用以及原理

key的作用 在diff演算法執行時,更快的找到對應的節點,高效的更新虛擬dom,key是具有唯一性的,所以在每次for迴圈的時候,我們需要key給每個節點做唯一的標識,唯一標識可以使item裡面id index 等 然後diff演算法就可以正確的識別此節點,找到正確的位置插入新的節點,vue 會盡...