預處理階段知識概要

2021-07-23 19:48:27 字數 1771 閱讀 6225

1.預處理階段

1).實現的作用: 

(1)實現巨集替換

(2)將使用的標頭檔案的展開

(3)取消注釋

(4)條件編譯              

在unix編譯中,預處理指令 gcc -e test.c test.i

下面在unix編寫乙個的簡單的程式展示下

預處理後結果

2).熟悉預處理識別符號

__file__

//進行編譯的源檔名

__line__

//檔案當前行的行號

__date__

//檔案被編譯的日期

__time__

//檔案被編譯的時間

#argument//巨集引數轉換為乙個字串argument

##//將位於兩邊的符號連線成乙個符號

下面寫個例子來進一步了解

2.巨集與函式的區別

巨集(#define):每次都需要在**塊中替換,所以**的長度會大幅度增加。執行速度提高。巨集引數的求值與表示式的上下程式有關,除非加上括號,就會產生由於操作符優先順序帶來的不可預料的結果。每次用於巨集定義時,都將重新求值,會產生***。巨集與型別無關。

函式:函式**出現於乙個地方,只需要呼叫不需要替換,**長度較短。由於函式呼叫、返回值存在額外開銷。函式只求值一次,多次使用引數不會導致多種求值過程,不會導致特殊問題。函式的引數與型別有關。

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

1)預處理階段

unix下的指令:gcc -e test.c -o test.i(test.c為源**)

2)編譯——c語言**轉換為彙編**

unix下的指令:gcc -s test.i -o test.s

3)彙編———彙編**轉換為二進位制

unix指令:gcc -c test.i -o test.o

4)鏈結——將二進位制**鏈結成乙個可執行程式

gcc test.o -o test1

./test1

預處理基礎知識

預處理符號 file 當前檔案的原檔案名字 line 檔案當前的行號 data 檔案編譯的日期 time 檔案編譯的時間 sdtc 如果編譯器準尋ansic,其值為1,否則未定義 define巨集和 undef巨集 define name name 定義乙個巨集定義 undef 移除乙個巨集定義 和...

預處理命令知識點

ansi c標準規定,可以在c源程式中加入一些 預處理命令 以改進程式設計環節,提高程式設計效率。這些預處理命令是由ansi c統一規定的,但是它不是c語言本身的組成部分,不能直接對它們進行編譯 因為編譯程式不能識別它們 必須在對程式進行通常的編譯之前 先對程式中這些特殊的命令進行 預處理 即根據預...

Ruby知識概要

ruby安裝,使用irb 數字,字串,陣列,雜湊,區間,正規表示式等的基本用法 流程控制 表示式,賦值,條件語句,迴圈 迭代器,block,變數作用域 方法定義和呼叫 檔案讀寫 類和物件 繼承,物件和屬性,例項方法,類方法,訪問控制 模組 命名空間,included,組合模組。異常處理 捕獲和丟擲 ...