本文主要講述了一個(gè)C程序從源代碼到目標(biāo)文件所經(jīng)過的步驟,介紹了編譯系統(tǒng),預(yù)處理、編譯、匯編和鏈接的相關(guān)知識。
一、編譯系統(tǒng)
一個(gè)C程序的生命周期從高級C語言程序開始。想要在系統(tǒng)上執(zhí)行.c程序,每條C語句都必須翻譯為低級的機(jī)器語言指令,將這些指令按照可執(zhí)行目標(biāo)程序的格式打包,以二進(jìn)制磁盤文件的形式存放,這就是可以由系統(tǒng)執(zhí)行的可執(zhí)行目標(biāo)文件。這些工作包含如下圖所示的四個(gè)過程,由編譯系統(tǒng)完成。
一般而言,編譯系統(tǒng)包括預(yù)處理器、編譯器、匯編器和鏈接器。
注意一下上圖中各個(gè)階段輸出的文件格式是文本文件還是二進(jìn)制文件。
1.預(yù)處理階段
源代碼.c文件和相關(guān)的頭文件如stdio.h等被預(yù)處理器編譯為一個(gè).i文件。
預(yù)處理過程主要處理那些源代碼文件中的以#開頭的預(yù)處理指令。主要規(guī)則如下:
a.刪除所有的#define,并展開所有的宏定義;
b.處理所有條件預(yù)處理指令,如#if #ifdef #elif #else #endif;
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26