• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            yehao's Blog

            如何使用VC的預編譯技術

            一、概念:

            1、預編譯:就是編譯器首先編譯某個文件(稱為預編譯頭文件),然后將這個編譯結果保存起來,之后如果有其他源文件include了這個“預編譯頭文件”的時候,則自動從這個編譯結果提取需要的信息進行編譯。

            2、預編譯結果文件(Precompiled header file):就是那個用來保存已經編譯了的符號信息的文件(.PCH作為后綴)

            3、生成預編譯結果文件(Create Precompiled header file):我們說源文件A通過文件B“生成預編譯結果文件”是指編譯A的時候將其中編譯B的編譯結果保存成預編譯結果文件。一般使用向導的話,A文件就是“stdafx.cpp”,B文件是“stdafx.h”。stdafx.cpp中就一行語句:

            #include “stdafx.h”

            4、使用預編譯頭(Using precompiled header):我們說某個源文件(a.cpp)通過“stdafx.h”來使用預編譯結果是指編譯a.cpp的時候,如果a.cpp第一行include語句是#include “stdafx.h”的話,那么直接取預編譯結果文件的結果,不再重新編譯”stdafx.h”

            二、向導是怎么做的?

            1、設置“stdafx.cpp”的預編譯選項是通過“stdafx.h”文件來“生成預編譯結果文件”。

            2、其他源文件的預編譯選項設置是通過“stdafx.h”來“使用預編譯頭”

            三、使用原則?

            1、將相對穩定的頭文件(比如CRT,STL,第三方固定的庫)全部寫在stdafx.h中。(是否使用stdafx.h依賴個人喜好,不過使用stdafx.h可以和向導保持一致)

            2、全部源文件第一行都加#include “stdafx.h”。

            3、一些不能修改的源文件(如果公共的代碼,不具備權限修改的代碼),設置他的預編譯選項是“不使用預編譯頭”。注意,一定不能是選擇“自動生成預編譯頭”,因為這樣會將stdafx.h的結果沖掉(這個不知道是BUG還是設計的問題了,.^_^。)。

            四、Q&A

            Q、為什么不全部使用“自動生成預編譯頭文件”?

            A、“自動生成預編譯頭文件”和什么都不用沒有什么兩樣,編譯速度沒有質的提高。

            Q、手工添加一個新的源文件到項目的時候,經常出現類似錯誤:

            fatal error C1010: unexpected end of file while looking for precompiled header directive

            A、因為向導缺省的設置是“使用預編譯頭”,但是你新加的文件并沒有在第一行包含“stdafx.h”。解決的方法要么修改成“不使用預編譯頭”,要么添加一行#include “stdafx.h”

            Q、加stdafx.h和stdafx.cpp總覺得是和編譯平臺綁定了,不具備移植性?

            A、其實,注意一下stdafx.h的寫法就沒有問題了。我的解決方案是(stdafx.h的內容):

            –begin of file stdafx.h

            #ifdef _WIN32

            #include “win.h”    // 泛指window下的公共頭文件

            #else

            #include “linux.h”    // 泛指linux下的公共頭文件

            #endif

            #include “crt.h”      //泛指c標準庫

            #include “stl.h”      //泛指STL庫

            –end of file

            或者更加簡單一點,如果不是VC編譯器,那么stdafx.h就什么內容都不寫!

            posted on 2012-01-05 09:05 厚積薄發 閱讀(288) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

            導航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統計

            常用鏈接

            留言簿

            隨筆分類

            文章分類

            文章檔案

            搜索

            最新評論

            综合久久一区二区三区 | 无码伊人66久久大杳蕉网站谷歌| 日韩久久无码免费毛片软件| 欧美成人免费观看久久| 999久久久免费精品国产| 久久精品夜色噜噜亚洲A∨| 欧美黑人激情性久久| 性做久久久久久久久老女人| 亚洲午夜久久久久久噜噜噜| 中文字幕精品久久久久人妻| 亚洲国产精品久久电影欧美| 国产精品久久久久一区二区三区| 久久精品人人做人人妻人人玩 | 日本强好片久久久久久AAA | 伊人色综合久久天天人手人婷| 99久久久精品| 亚洲国产精品高清久久久| 精品久久国产一区二区三区香蕉| 久久久久久久尹人综合网亚洲| 97久久婷婷五月综合色d啪蜜芽| 97r久久精品国产99国产精| 精品国产乱码久久久久软件| 亚洲伊人久久综合影院| 99久久婷婷国产综合精品草原 | 久久精品无码一区二区无码| 波多野结衣久久一区二区| 久久国产成人午夜aⅴ影院| 99国产欧美精品久久久蜜芽| 日韩久久久久久中文人妻| 亚洲国产精品无码久久久蜜芽| 人妻丰满?V无码久久不卡| 久久丝袜精品中文字幕| 久久久免费观成人影院 | 久久久久九国产精品| 狠狠人妻久久久久久综合蜜桃| 国产精品久久久久久影院| 99久久国产热无码精品免费 | 国内精品人妻无码久久久影院 | 国产精品免费久久久久影院| 天天综合久久久网| 久久久久亚洲AV综合波多野结衣|