帶你玩轉Visual Studio——帶你理解微軟的先行編譯頭技術

來源:互聯網
上載者:User

通過上一篇文章帶你玩轉Visual Studio——帶你多工程開發的講解,我們能夠在一個Solution中建立多個Project,統一管理一個項目的多個Project。本篇文章我們將繼續講解微軟的先行編譯頭技術。 不陌生的stdafx.h

還記得帶你玩轉Visual Studio——帶你建立一個工程一文中的圖2(為方便閱讀,已拷貝到下圖 1)嗎。我們預設勾選了Precompiled header複選框,建立的工程中就自動添加了stdafx.h和stdafx.cpp,stdafx.h就是先行編譯標頭檔,勾選Precompiled header就表明採用了微軟的先行編譯頭技術。

圖 1:Application Settings

開啟或關閉先行編譯方式

右鍵工程名->Properties->Configuration Properties->C/C++->Precompiled Header,Precompiled Header下拉式清單方塊選擇Use(/Yu)表示開啟(使用)先行編譯頭的方式,選擇Not Using Precompiled Headers表示關閉先行編譯頭的編譯方式。

圖 2:先行編譯頭的設定

參數說明:
Precompiled Header:是否採用先行編譯頭的方式;
Precompiled Header File:先行編譯標頭檔的名稱,VS中檔案名稱的大小寫不敏感,但最好保持大小寫相同。
Precompiled Header Output File:產生的.pch檔案我名稱,關於.pch檔案將再在下面先行編譯原理小節中講述。

如果是要使用先行編譯標頭檔的方式,還需要設定stdafx.cpp檔案的屬性。右鍵stdafx.cpp->Properties->Configuration Properties->C/C++->Precompiled Header,Precompiled Header下拉式清單方塊中選擇Create(Yc).

圖 3:設定.cpp的屬性

注意事項

每一個源檔案的第一行代碼必須包含先行編譯標頭檔。如果你的工程選用了先行編譯標頭檔的方式,每一個.cpp檔案的第一行代碼必須包含先行編譯標頭檔(#include “stdafx.h”),否則會編譯出錯。 先行編譯技術的記憶體原理

在Windows程式開發時,經常要在各個檔案中包含windows.h、afx.h等標準標頭檔,而這些檔案非常的大,在編譯時間就非常的慢,非常耗時。為解決這個問題,已是就有了先行編譯標頭檔的技術。

所謂標頭檔先行編譯技術,就是把一個工程(Project)中常用的一些標頭檔(如標準標頭檔Windows.h、Afxwin.h等,也可以是自己定義的標頭檔)包含在stdafx.h中,並對stdafx.h預先編譯(在所有的.cpp檔案編譯之前進行編譯),得到編譯結果.pch檔案(預設名稱為ProjectName.pch),後期該工程在編譯其它.cpp檔案時不再編譯stdafx.h中的內容(即使include了它),僅僅使用先行編譯的結果。
其中stdafx.h叫做先行編譯標頭檔,stdafx名稱的英文全稱為:Standard Application Framework Extensions,當然你也可以自己定義先行編譯標頭檔的名稱,手動重新命名stdafx.h,同時將上面圖2和圖3中對應的名稱也得改過來。ProjectName.pch叫做先行編譯頭

採用先行編譯頭技術後,可以加快編譯速度,節省編譯時間。因為只需要預先編譯一次就可以在所有的.cpp編譯時間使用,不用再次編譯。這樣帶來的一個問題就是每一個.cpp檔案的開頭都要包含先行編譯標頭檔#include “stdafx.h”。因為先行編譯頭技術是假定先行編譯頭中的內容會在所有.cpp檔案中使用,在編譯你的 .cpp 的時候,就會將先行編譯頭中已經編譯完的部分載入到記憶體中。

使用先行編譯標頭檔需要注意的幾個要點:
1. 你編寫的任何.cpp檔案都必須首先包含stdafx.h。
2. 如果你有工程檔案裡的大多數.cpp檔案需要的.h檔案,順便將它們加在stdafx.h(後部)上,然後先行編譯stdafx.cpp。
3. 由於.pch檔案具有大量的符號資訊,它是你的工程檔案裡最大的檔案。 如何在非MFC工程中使用MFC庫

這部分內容之前寫過,就不再贅述,直接給出連結:
非MFC工程中使用MFC庫

上一篇回顧:
帶你玩轉Visual Studio——帶你多工程開發

下一篇要講述的內容:
帶你玩轉Visual Studio——帶你跳出Runtime Library大坑

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.