在學習c++過程中,遇到了標頭檔案為什麼最好是包含.h型別,而不是cpp型別的問題。在尋找結果的過程過,發現是跟語言的編譯過程有關,藉此機會學習一下c/c++的編譯過程
目的就是:將高階語言轉換成二進位制語言,供計算機執行;
1.預處理
替換**中的標頭檔案,巨集定義,去除**注釋
gcc -e text.cpp -o text.i -e:預處理完成後終止編譯進行
2.編譯
此過程中會將預處理之後的**,翻譯特定的彙編**,通常情況下,當編譯器報錯語法錯誤時,就是在這個過程中。
gcc -s text.cpp -o text.i -s:編譯完成後終止編譯進行
3.彙編
顯而易見,就是把上一步轉換到的彙編**,翻譯成機器語言
gcc -c text.cpp -o text.o -c:彙編完成後終止編譯進行
在c/c++中,一定少不了對頭檔案的引用,當編譯器把自己的cpp編譯以後,還會鏈結到cpp中的標頭檔案所對應的,obj檔案,如此以來,整個程式才被編譯成了可執行檔案。
附表:副檔名
檔案型別
.cc語言**
.c、.cc、.cpp
c++語言**
.i預處理後的c語言**
.s、.s
組合語言**
.o目標**
.a靜態鏈結庫(程式編譯時使用)
.so動態鏈結庫(程式執行時使用
回到上面的問題:
q:為什麼最好是包含.h型別,而不是cpp型別的問題?
a:當我們的標頭檔案是cpp檔案時,有如下弊端:
include <.cpp> 對***.cpp檔案重新編譯,之後將二者連線 。**
#include<.h> 對.h對應的檔名實現連線。*
編譯器的工作過程
c語言編譯過程詳解
c/c++程式編譯過程詳解
C C 編譯過程
大神部落格1 大神部落格2 大神部落格3 過程主要有四個 編譯預處理 preprocessing 編譯 優化階段 compilation 彙編過程 assemble 鏈結程式 linking 1.編譯預處理 preprocessing 預處理用於將所有的 include標頭檔案以及巨集定義替換成其真...
C C 語言編譯過程
2.編譯 優化過程 將.i檔案翻譯成會變得彙編 s檔案 在windows中,通常使用.asm便是彙編檔案 具體過程 詞法分析 語法分析 語義分析 中間 生成 優化 生成 將多個步驟組合成趟 編譯器構成工具 ps 這裡解釋一下 趟 的概念 這個 趟 指的是對源程式或者其等價的中間 語言程式進行從頭到尾...
C C 編譯過程詳解
gcc編譯過程四個步驟 1 預編譯 處理標頭檔案,處理巨集定義 2 編譯 c 編譯成 s檔案 3 彙編 s頭檔案匯編成機器碼.o 4 連線 吧不同的.o檔案連線起來。生成乙個可執行檔案 分析器 將源語言程式 轉換為組合語言,因為要從一種格式轉換為另一種格式分析器需要知道目標機器的組合語言。c 彙編 ...