C語言學習記錄19 編譯過程

2021-09-24 23:02:16 字數 994 閱讀 6546

本節課研究c語言如何編譯語言程式。對編譯器的了解程度決定**的產品質量。

file.i 中間**

file.s 彙編檔案

file.o 二進位制檔案

預編譯(文字處理工作)

1)處理所有的注釋,用空格代替;

2)將所有的#define刪除,並且展開所有的巨集定義;

3)處理條件編譯命令,#if,#ifdef,#elif,#else,#endif

4)處理#include,展開被包含的檔案;

5)保留編譯器需要使用的#pragma命令;

預處理指令示例:

gcc –e file.c –o file.i

編譯

1)對預處理檔案進行詞法分析,語法分析和語義分析;

a> 詞法分析:分析關鍵字,指示符,立即數等是否合法;

b> 語法分析:分析表示式是否遵循語法原則;

c> 語義分析:在語法分析的基礎上進一步分析表示式是否合法;

分析結束後進行**優化生成相應的彙編**檔案;

編譯指令示例:

gcc –s file.i –o file.s

彙編(相對編譯器工作簡單)

1)彙編器將彙編**轉變為機器的可以執行**;

2)每條彙編語句幾乎都對應一條機器指令;

彙編指令示例:

gcc –c file.s –o file.o

小結:編譯過程分為預處理,編譯,彙編和鏈結四個階段。

1)預處理:處理注釋,巨集以及#開頭的符號;

2)編譯:進行詞法分析,語法分析和語義分析;

3)彙編:將彙編**翻譯為機器指令的目標檔案;

C 語言學習記錄 19 記憶體的分割槽模型

c 在執行時,將記憶體從大方向上劃分為四個區域,在這些不同區域中存放的資料,會被賦予不同的生命週期,以便我們靈活程式設計。1.區 由作業系統管理,用於存放函式體的二進位制 2.全域性區 用於存放全域性變數和靜態變數以及常量 3.棧區 由編譯器自動分配 釋放,存放函式的引數值和區域性變數等 4.堆區 ...

C語言學習記錄20 鏈結過程

問題 工程中的每個c語言原始檔被編譯後生產目標檔案,這些檔案如何生成最終的可執行程式?鏈結器的主要作用是把各個模組之間相互引用的部分處理好,使得模組之間能夠爭取的銜接。靜態鏈結 由鏈結器在鏈結時將庫的內容直接加入到可執行程式中。在linux靜態庫下的建立和使用 1 編譯靜態庫原始碼 gcc c li...

C語言學習要點記錄

1.運算的優先順序 算數 關係 邏輯 賦值 逗號運算子 2.複製是程式不良的表現 因為一旦乙個地方有變動要在很多地方修改 3.程式設計的過程中最好使用單一出口 4.本地變數在定義的時候不會預設初始化,引數在定義的時候一定要初始化 5.本地變數的生存期和作用域在定義的塊內 6.程式這次執行正常下次執行...