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