C++ 预编译头文件
1、解決什么問(wèn)題?
C++ 編譯器是單獨(dú),分別編譯的,每個(gè)cpp文件,進(jìn)行預(yù)編譯(也就是對(duì)#include,define 等進(jìn)行文本替換),生成編譯單元。編譯單元是一個(gè)自包含文件,C++編譯器對(duì)編譯單元進(jìn)行編譯。考慮,頭文件A.h被多個(gè)cpp文件(比如A1.cpp,A2.cpp)包含,每個(gè)cpp文件都要進(jìn)行單獨(dú)編譯,其中的A.h部分就會(huì)被多次重復(fù)第編譯,影響效率。
2、怎么解決?
把A.h以及類似A.h這樣的頭文件,包含到stdafx.h中(當(dāng)然也可以是其他文件),在stdafx.cpp中包含stdafx.h,設(shè)置stdafx.cpp文件的屬性,預(yù)編譯頭設(shè)置為 創(chuàng)建。對(duì)于原先包含A.h的cpp文件,刪除#include "A.h",改成包含stdafx.h,同時(shí)設(shè)置這些cpp文件(A1.cpp,A2.cpp)的屬性,預(yù)編譯頭設(shè)置為 使用。這樣的話,下次編譯A1.cpp,A2.cpp的時(shí)候,對(duì)于A.h頭文件中的那部分,就不需要編譯了,節(jié)省時(shí)間。
3、預(yù)編譯頭文件原理
工程對(duì)預(yù)先編譯的代碼進(jìn)行編譯,會(huì)生成一個(gè)pch文件(precompiled header),包含了編譯的結(jié)果。注意,可以對(duì)任何代碼生成到pch中,但是生成pch是個(gè)很耗時(shí)的操作,因此,只對(duì)那些穩(wěn)定的代碼創(chuàng)建預(yù)編譯頭文件。
4、對(duì)于預(yù)編譯頭,分為:創(chuàng)建者,使用者,不使用者。
5、注意:現(xiàn)在的編譯器都有Time Stramp 功能,當(dāng)編譯整個(gè)工程的時(shí)候,只編譯那些修改的cpp文件。但是,這并沒有解決上面提到的問(wèn)題。考慮A1.cpp經(jīng)常修改,每次修改,都要對(duì)包含的A.h頭文件部分,進(jìn)行編譯。
6、Time Stramp:時(shí)間戳是指文件屬性里的創(chuàng)建,修改,訪問(wèn)的時(shí)間。每次,文件內(nèi)容修改,時(shí)間戳都會(huì)更新為最新的時(shí)間,時(shí)間戳發(fā)生變化,說(shuō)明文件被修改了。
補(bǔ)充說(shuō)明:時(shí)間戳往往應(yīng)用在同步,比如音頻視頻不同步。舉例來(lái)說(shuō),A,B兩個(gè)人約定在一起,7點(diǎn)干什么,8點(diǎn)干什么,9點(diǎn)干什么,如果在7點(diǎn)沒有同步,就算了,盡量保證8點(diǎn)同步。也就是說(shuō),同步是動(dòng)態(tài)的過(guò)程,當(dāng)不同步時(shí),一個(gè)等待,一個(gè)追趕,保證下一個(gè)時(shí)間點(diǎn)同步。
轉(zhuǎn)載于:https://www.cnblogs.com/nzbbody/p/3437868.html
總結(jié)
以上是生活随笔為你收集整理的C++ 预编译头文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: struct的初始化
- 下一篇: 排序算法——堆排序(C++)