欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析VC中預編譯頭文件的深入分析

 更新時間:2013年05月17日 17:36:07   作者:  
本篇文章是對VC中預編譯頭文件進行了詳細的分析介紹,需要的朋友參考下
一。為什么預編譯頭文件:
預編譯頭的概念:
所謂的預編譯頭就是把一個工程中的那一部分代碼,預先編譯好放在一個文件里(通常是以.pch為擴展名的),這個文件就稱為預編譯頭文件這些預先編譯好的代碼可以是任何的C/C++代碼,甚至是inline的函數(shù),但是必須是穩(wěn)定的,在工程開發(fā)的過程中不會被經常改變。如果這些代碼被修改,則需要重新編譯生成預編譯頭文件。注意生成預編譯頭文件是很耗時間的。同時你得注意預編譯頭文件通常很大,通常有6-7M大。注意及時清理那些沒有用的預編譯頭文件。
也許你會問:現(xiàn)在的編譯器都有Time stamp的 功能,編譯器在編譯整個工程的時候,它只會編譯那些經過修改的文件,而不會去編譯那些從上次編譯過,到現(xiàn)在沒有被修改過的文件。那么為什么還要預編譯頭文件呢?答案在這里,我們知道編譯器是以文件為單位編譯的,一個文件經過修改后,會重新編譯整個文件,當然在這個文件里包含的所有頭文件中的東西(.eg Macro, Preprocessor )都要重新處理一遍。VC的預編譯頭文件保存的正是這部分信息。以避免每次都要重新處理這些頭文件。
根據(jù)上文介紹,預編譯頭文件的作用當然就是提高編譯速度了,有了它你沒有必要每次都編譯那些不需要經常改變的代碼。編譯性能當然就提高了。

我們來考察一個典型的由AppWizard生成的MFC Dialog Based 程序的預編譯頭文件。(因為AppWizard會為我們指定好如何使用預編譯頭文件,默認的是StdAfx.h,這是VC起的名字)。我們會發(fā)現(xiàn)這個頭文件里包含了以下的頭文件:
#include <afxwin.h>    // MFC core and standard components
#include <afxext.h>    // MFC extensions
#include <afxdisp.h>    // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#include <afxcmn.h>
這些正是使用MFC的必須包含的頭文件,當然我們不太可能在我們的工程中修改這些頭文件的,所以說他們是穩(wěn)定的。

二。如何預編譯頭文件:
要使用預編譯頭,我們必須指定一個頭文件,這個頭文件包含我們不會經常改變的代碼和其他的頭文件,然后我們用這個頭文件來生成一個預編譯頭文件(.pch文件)想必大家都知道 StdAfx.h這個文件。很多人都認為這是VC提供的一個“系統(tǒng)級別”的,編譯器帶的一個頭文件。其實不是的,這個文件可以是任何名字的。
1.如何在工程中使用預編譯頭文件:最簡單的是在建立工程的時候選擇“使用預編譯頭文件”;如果建立工程時沒選,那么還可以在project ->Setting->C/C++ ->precompimed header中設置。
2.如何指定預編譯頭文件的頭文件名:默認為StdAfx.h,不過可以通過project ->Setting->C/C++ ->precompimed header中設置成任何名字(實際是通過指令/Yc, /Yu)。然后再把穩(wěn)定不變的代碼的頭文件包含到該頭文件中即可。
3.需要的實現(xiàn)文件:編譯需要CPP文件,而這個CPP文件自然地就是頭文件名對應的CPP文件了,在這個CPP文件里只有一句胡:包含要預編譯的文件頭。
4.通過project ->Setting->C/C++ ->precompimed header中設置預編譯文件的名稱(以.pch結尾)(實際上是通過指定/Fp )。

三。如何使用預編譯的頭文件:
1.通過project ->Setting->C/C++ ->precompimed header設置好使用預編譯頭文件(/Yc, /Yu),依賴哪個頭文件,及預編譯好的頭文件名。
2.如果你把pch文件不小心丟了,根據(jù)以上的分析,你只要讓編譯器生成一個pch文件就可以了。也就是說把 stdafx.cpp(即指定/Yc的那個cpp文件)重新編譯一遍就可以了。當然你可以傻傻的 Rebuild all。簡單一點就是選擇那個cpp文件,按一下Ctrl + F7就可以了。
3.如果使用了/Yu,就是說使用了預編譯,我們在每個.cpp文件的最開頭,我強調一遍是最開頭,包含你指定產生pch文件的.h文件(默認是stdafx.h)不然就會有問題。如果你沒有包含這個文件,就告訴你Unexpected file end. 如果你不是在最開頭包含的,你自己試以下就知道了,絕對有很驚人的效果。 (原因就在于編譯器編譯的時候不會編譯stdafx.h前面的頭文件)。

相關文章

  • C++自定義函數(shù)判斷某年某月某日是這一年中第幾天

    C++自定義函數(shù)判斷某年某月某日是這一年中第幾天

    這篇文章主要介紹了C++自定義函數(shù)判斷某年某月某日是這一年中第幾天的方法,涉及C++日期與時間操作相關技巧,需要的朋友可以參考下
    2016-06-06
  • 深入講解C++中的構造函數(shù)

    深入講解C++中的構造函數(shù)

    這篇文章主要介紹了C++中的構造函數(shù),是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • C語言數(shù)組應用實現(xiàn)掃雷游戲

    C語言數(shù)組應用實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了C語言數(shù)組應用實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 通過c++的sort函數(shù)實現(xiàn)成績排序功能

    通過c++的sort函數(shù)實現(xiàn)成績排序功能

    這篇文章主要介紹了通過c++的sort函數(shù)實現(xiàn)成績排序,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C語言求向量和的兩則問題解答分享

    C語言求向量和的兩則問題解答分享

    這篇文章主要介紹了C語言求向量和的兩則問題解答分享,分別是求連續(xù)子向量的最大和和任何連續(xù)最接近0的子向量的和的問題,需要的朋友可以參考下
    2016-04-04
  • C語言數(shù)據(jù)結構之線性表的鏈式存儲結構

    C語言數(shù)據(jù)結構之線性表的鏈式存儲結構

    線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結構。線性表(linear list)是數(shù)據(jù)結構的一種,一個線性表是n個具有相同特性的數(shù)據(jù)元素的有限序列,這篇文章帶你學習下線性表的鏈式存儲結構
    2021-11-11
  • C++詳解如何實現(xiàn)兩個線程交替打印

    C++詳解如何實現(xiàn)兩個線程交替打印

    這篇文章主要介紹了使用C++庫實現(xiàn)兩個線程交替打印,一個線程打印奇數(shù)、一個線程打印偶數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C語言楊氏矩陣簡單實現(xiàn)方法

    C語言楊氏矩陣簡單實現(xiàn)方法

    楊氏矩陣是一個數(shù)字矩陣,矩陣的每一行從左到右一次遞增,矩陣從上到下遞增,在這樣的矩陣中查找一個數(shù)字是否存在。時間復雜度小于O(N),有需要的朋友可以借鑒參考下
    2023-02-02
  • C語言中反斜杠的作用及說明

    C語言中反斜杠的作用及說明

    這篇文章主要介紹了C語言中反斜杠的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++中傳值、傳地址和傳引用究竟有哪些區(qū)別

    C++中傳值、傳地址和傳引用究竟有哪些區(qū)別

    指針是一個變量,只不過這個變量存儲的是一個地址,指向內存的一個存儲單元,而引用跟原來的變量實質上是同一個東西,只不過是原變量的一個別名而已,這篇文章主要給大家介紹了關于C++中傳值、傳地址和傳引用究竟有哪些區(qū)別的相關資料,需要的朋友可以參考下
    2021-07-07

最新評論