預處理,巨集,隱藏在背後的編譯和鏈結

2021-07-23 19:50:41 字數 1129 閱讀 9529

一.預處理器:在程式設計的時候,第乙個步驟就是預處理;就是編碼之前對其進行文本性的操作。

主要有四個作用

1.巨集替換

2.標頭檔案的展開

3.去注釋

4.條件編譯

是否有過這種經歷,編譯的**自己不滿意,過段時間要找,然後找了很長時間,這是可以通過程式找到當時**的目錄檔案,日期,以及行數和時間 都可以,這時候就可以用上常見的這些預處理標示符。

#define __file__ //編譯的原始檔;

#define __line__ //當前的行號;

#define __data__ //編譯的日期;

#define __time__ //編譯的時間;

二.# 和##的作用

在巨集定義中常用#建立字串。

預處理中##起到連線的作用。如:

#define _crt_secure_no_warnings 1

#include

#include

#include

#define str1 "we"

#define str2 "are"

#define cat(a,b,c) a##b##c

int main()

三.了解巨集和函式的區別。

巨集可以頻繁的執行簡單的運算如求兩個數的最大值;

#define max(a,b) (a>b?b:a)

而函式的引數的宣告必須為一種特定的型別,而巨集不用考慮這些,所以巨集與型別無關。

實現把字元陣列中的每個空格替換成「%100」。

四.理解編譯鏈結的整個過程和詳細的每個過程。

編譯鏈結就是將源**轉換成計算機可執行的程式。

乙個簡單的程式,都要經歷四個步驟:預處理,編譯,彙編和鏈結四個過程。

編譯:就是將預處理的檔案經過詞法,語義的分析以及優化產生相應的彙編**檔案。這個過程是整個 程式最核心也是最複雜的過程。

彙編彙編器就是將彙編**變成計算機可執行的指令,幾乎每乙個彙編**都有對應的計算機指令。這個過程沒有複雜的語義,也不用進行優化,只需參照計算機給的指令翻譯就好了。

鏈結程式的主要就是將有關的目標檔案彼此相連線,也即將在乙個檔案中引用的符號同該符號在另外乙個檔案中的定義連線起來,使得所有的這些目標檔案成為乙個能夠誒作業系統裝入執行的統一整體。

gcc編譯的背後 預處理 編譯 彙編和鏈結 一

本次將分為四個章節來講,分別來講述一下gcc編譯背後的四個步驟。第一部分 預處理。相信大家對這一塊其實挺了解了,下面我就獻醜,以自己的理解再講一遍。預處理是c語言從源 變成可執行程式的第一步,它包括標頭檔案的包含,巨集定義擴充套件,條件編譯的選擇等。首先介紹一下預處理的命令 一共有12條預處理的命令...

關於預處理 巨集和函式 編譯鏈結的理解

1.預處理識別符號 file 當前編譯的原始檔 line 檔案當前所屬行號 date 檔案被編譯日期 time 檔案被編譯時間 將其後的巨集引數進行字串化操作,簡單講就是在它引用的巨集變數左右各加上乙個雙引號 將其兩邊符合連線成乙個符號 eg define cat str1,str2 str1 st...

預處理,編譯,彙編和鏈結

1 我們有乙個hello.c檔案,用最簡單的命令gcc hello.c 生成 a.out 這個過程可以分為四個步驟 預處理 prepressing 編譯 compilation 彙編 assembly 和鏈結 linking 一 預編譯 1.將所有的 define刪除,並展開所有的巨集定義 2.處理...