预编译头说明
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是個很耗時的操作,因此,只對那些穩定的代碼創建預編譯頭文件。
?
編譯系統說明:
例:取源程序hello.c 將其翻譯成一個可執行目標文件hello.翻譯過程分為四個階段。
1)預處理階段:預處理器根據以字符#開頭的命令,修改原始的C程序。比如#include<stdio.h> 就是將它直接插入到程序文本中。
2)編譯階段:將文本文件hello.i翻譯成文本hello.s 包含一個匯編語言程序。匯編語言為不同的語言的不同編譯器提供了通用的輸出語言。
3)匯編階段:匯編器將hello.s翻譯成機器語言指令,將指令打包成一個可重定位目標程序。
4)鏈接階段:printf函數存在于一個名為printf.o單獨編譯好的目標文件中。鏈接器負責處理這種合并。
?
轉載于:https://www.cnblogs.com/xiuxiu55/p/6767270.html
總結
- 上一篇: 【个人申明】主要发表平台迁至简书和公众号
- 下一篇: PCB阻抗控制