• <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的預(yù)編譯技術(shù)

            一、概念:

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

            2、預(yù)編譯結(jié)果文件(Precompiled header file):就是那個(gè)用來保存已經(jīng)編譯了的符號(hào)信息的文件(.PCH作為后綴)

            3、生成預(yù)編譯結(jié)果文件(Create Precompiled header file):我們說源文件A通過文件B“生成預(yù)編譯結(jié)果文件”是指編譯A的時(shí)候?qū)⑵渲芯幾gB的編譯結(jié)果保存成預(yù)編譯結(jié)果文件。一般使用向?qū)У脑挘珹文件就是“stdafx.cpp”,B文件是“stdafx.h”。stdafx.cpp中就一行語句:

            #include “stdafx.h”

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

            二、向?qū)窃趺醋龅模?/p>

            1、設(shè)置“stdafx.cpp”的預(yù)編譯選項(xiàng)是通過“stdafx.h”文件來“生成預(yù)編譯結(jié)果文件”。

            2、其他源文件的預(yù)編譯選項(xiàng)設(shè)置是通過“stdafx.h”來“使用預(yù)編譯頭”

            三、使用原則?

            1、將相對(duì)穩(wěn)定的頭文件(比如CRT,STL,第三方固定的庫)全部寫在stdafx.h中。(是否使用stdafx.h依賴個(gè)人喜好,不過使用stdafx.h可以和向?qū)П3忠恢拢?/p>

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

            3、一些不能修改的源文件(如果公共的代碼,不具備權(quán)限修改的代碼),設(shè)置他的預(yù)編譯選項(xiàng)是“不使用預(yù)編譯頭”。注意,一定不能是選擇“自動(dòng)生成預(yù)編譯頭”,因?yàn)檫@樣會(huì)將stdafx.h的結(jié)果沖掉(這個(gè)不知道是BUG還是設(shè)計(jì)的問題了,.^_^。)。

            四、Q&A

            Q、為什么不全部使用“自動(dòng)生成預(yù)編譯頭文件”?

            A、“自動(dòng)生成預(yù)編譯頭文件”和什么都不用沒有什么兩樣,編譯速度沒有質(zhì)的提高。

            Q、手工添加一個(gè)新的源文件到項(xiàng)目的時(shí)候,經(jīng)常出現(xiàn)類似錯(cuò)誤:

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

            A、因?yàn)橄驅(qū)笔〉脑O(shè)置是“使用預(yù)編譯頭”,但是你新加的文件并沒有在第一行包含“stdafx.h”。解決的方法要么修改成“不使用預(yù)編譯頭”,要么添加一行#include “stdafx.h”

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

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

            –begin of file stdafx.h

            #ifdef _WIN32

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

            #else

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

            #endif

            #include “crt.h”      //泛指c標(biāo)準(zhǔn)庫

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

            –end of file

            或者更加簡(jiǎn)單一點(diǎn),如果不是VC編譯器,那么stdafx.h就什么內(nèi)容都不寫!

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

            導(dǎo)航

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆分類

            文章分類

            文章檔案

            搜索

            最新評(píng)論

            中文字幕无码免费久久| 波多野结衣中文字幕久久| 九九久久精品无码专区| 伊人色综合久久天天人守人婷| 久久久久精品国产亚洲AV无码| 久久亚洲精品国产精品| 久久se精品一区二区影院| 麻豆av久久av盛宴av| 国产高潮国产高潮久久久91 | 性欧美大战久久久久久久| 亚洲国产综合久久天堂 | 亚洲乱码精品久久久久..| 999久久久国产精品| 国产亚洲色婷婷久久99精品| 无码精品久久一区二区三区| 久久精品这里热有精品| 国产A级毛片久久久精品毛片| 国产高潮国产高潮久久久91 | 四虎国产精品成人免费久久| 久久免费精品一区二区| 精品久久久久久久久午夜福利| 久久只有这精品99| 国产AⅤ精品一区二区三区久久| 亚洲αv久久久噜噜噜噜噜| 青青热久久国产久精品| 精品国产一区二区三区久久蜜臀| 国产精品久久99| 国产精品99久久精品| 国产欧美一区二区久久| 久久福利青草精品资源站免费| 97热久久免费频精品99| 成人资源影音先锋久久资源网| 午夜天堂av天堂久久久| 99蜜桃臀久久久欧美精品网站| 日韩亚洲国产综合久久久| 日批日出水久久亚洲精品tv| 一本色道久久88综合日韩精品| 亚洲v国产v天堂a无码久久| 久久亚洲AV成人无码软件| 久久精品青青草原伊人| 无码人妻少妇久久中文字幕蜜桃|