日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

預(yù)編譯頭文件的問題 - Thinking dynamic - 博客園

 verychen 2010-12-08

預(yù)編譯頭文件的問題

整了一晚上,終于明白了預(yù)編譯頭文件.

DXUT(The DirectX Utility Library)是初學(xué)DirectX的一個好用的框架, 今天照著Sample里的EmptyProject建了一個工程, 引用了DXUT的代碼, 并將設(shè)置-->C/C++-->Precompiled設(shè)置為Use Precompiled Header(/UC), DXUT.h, 發(fā)現(xiàn)怎么也編譯不過去. 搞了半天才發(fā)現(xiàn)DXUT.cpp文件沒有設(shè)置成Create Precompiled Header(/YC).:(

下面隨便介紹一下預(yù)編譯頭文件的原理:

在DXUT.cpp里include一次DXUT.h,生成一次pch,pdb文件,其他地方實際上直接用這個編譯的結(jié)果,從而減少編譯時間,提高編譯效率。一般,我們把常用的不變的庫頭文件放里面,如,atlbase.h,atlcore.h,windows.h等,通常的com里import進來的dll,tlb也放這個里面,這樣,它能做到,只編譯一次,其他地方直接用編譯出的結(jié)果。

如果預(yù)編譯頭文件被正確使用時,它確實大大提高我們編程的效率(你工作中,有多少時間是在等編譯完成?很多吧,這個時候一般都很無聊,無奈,浪費時間)。但是他太容易用錯了. 下面是幾種常見的錯誤用法.

1) 在預(yù)編譯頭文件里include自己的頭文件(當然, 如果你的頭文件不經(jīng)常變化, 也可以)

原因:自己的頭文件一般會經(jīng)常變, 便利后導(dǎo)致預(yù)編譯的東東重新編譯, 降低了編譯速度.

2) 在其他的頭文件里也include 預(yù)編譯頭文件

假設(shè)你的其他頭文件也include了預(yù)編譯頭文件, 如果別人引用你的這個頭文件又沒有設(shè)置成預(yù)編譯頭文件, 那引用你頭文件的這個人就煎熬了.

原因:由于你用到的.h文件里include了預(yù)編譯頭文件,他在他本身的project里,vs能夠判斷的出他是預(yù)編譯頭,也能找的到需要的pch,pdb文件。所以對寫這個.h文件的人沒影響。但是你作為他的客戶,你工作在你的project下,你include了他的h頭文件,而這時vs判斷不出他的頭文件里include的stdafx是預(yù)編譯頭文件,做普通文件編。那可想而知,他的stdafx里如果有import外面大型的庫(如inventor的tlb,非常慢,我們犯了這個錯),那編譯速度簡直是煎熬。最要命的是,以后你做任何簡單的修改都要重編,這和預(yù)編譯解決的問題恰好相反了。

下面給出一個使用預(yù)編譯頭文件的操作步驟, 享受一下預(yù)編譯頭文件給我們帶來的編譯速度的提升:

1) 添加一個stdafx.h文件(名字隨便取, 這里用了VS默認提供的名稱), 在這個.h文件里include要使用的頭文件(一般是外部的庫, 自己寫的不常變的頭文件也可以加進來)

2) 添加一個stdafx.cpp文件, 并include "stdafx.h"

3)項目屬性-->c/c++-->Precompiled設(shè)置為Use Precompiled Header, stdafx.h

4)stdafx.cpp屬性-->c/c++->Precompiled設(shè)置為Create Precompiled Header, stdafx.h

done!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多