程式的環境和預處理

2021-10-08 03:39:59 字數 1537 閱讀 5489

原始檔--》編譯器--》目標檔案--》鏈結器《--鏈結庫

|可執行程式

編譯器需要進行預處理,編譯,彙編。而聯結器需要將目標檔案和c庫檔案進行鏈結

形成可執行程式。預處理需要進行標頭檔案展開,去注釋,巨集替換,條件編譯,編譯是

將c變成彙編**,彙編是將彙編**變成二進位制目標檔案。

1. 預處理 選項 gcc -e test.c -o test.i 預處理完成之後就停下來,預處理

之後產生的結果都放在test.i檔案中。

2. 編譯 選項 gcc -s test.c 編譯完成之後就停下來,結果儲存在test.s中。

3. 彙編 gcc -c test.c 彙編完成之後就停下來,結果儲存在test.o中。

4. 預處理詳解

__file__

//進行編譯的原始檔

__line__

//檔案當前的行號

__date__

//檔案被編譯的日期

__time__

//檔案被編譯的時間

__stdc__ //如果編譯器遵循ansi c,其值為1,否則未定義

這些預定義符號都是語言內建的。

#define max 1000

#define reg register

//為 register這個關鍵字,建立乙個簡短的名字

#define do_forever for(;;)

//用更形象的符號來替換一種實現

#define case break;case

//在寫case語句的時候自動把 break寫上。

// 如果定義的 stuff過長,可以分成幾行寫,除了最後一行外,每行的後面都加乙個反斜槓(續行符)。

#define debug_print printf("file:%s\tline:%d\t \

date:%s\ttime:%s\n" ,\

__file__,__line__ , \

__date__,__time__ )

#define max 1000;

#define max 1000

//在define定義的識別符號後不要帶;可能會出現報錯

#define name( parament-list ) stuff 其中的 parament-list 是乙個由逗號隔開的符號表,它們可能出現在stuff中。

如#define square

( x ) x * x

當 square(5

)時,進行文字替換,即5*5

使用 # ,把乙個巨集引數變成對應的字串

如: int i =10;

#define print(format, value)\

printf("the value of " #value "is "format "\n", value);

print

("%d"

, i+3)

;輸出為the value of i+

3 is 13

程式環境和預處理

程式環境 1.翻譯環境 編譯 鏈結 先將組成乙個程式的每個原始檔通過編譯轉換成目標檔案,再將每個目標檔案通過編譯器 在一起鏈結成乙個 可執行檔案 翻譯過程 1.預處理 c c 標頭檔案展開,巨集替換,去注釋,條件編譯 2.編譯 c 彙編 3.彙編 彙編 二進位制 4.鏈結 常見的鏈結方式 2.執行環...

程式環境和預處理

一 程式的編譯環境和執行環境 1 每乙個程式的原始檔都會通過編譯過程轉換為相應的目標 2 每乙個目標 由鏈結器 在一起,形成乙個單一的可執行程式。3 鏈結器同時也會引入標準庫函式中被程式任意引用的庫函式,而且還可以搜尋程式設計師的個人程式庫,將需要的函式也鏈結到程式之中。編譯分為幾個階段組成 程式執...

程式環境和預處理

翻譯環境中源 被轉換為可執行的機器命令。預編譯 預處理指令。標頭檔案的包含,注釋刪除,define處理。相當於根據預處理指令組裝新的c c 程式。經過預處理,會產生乙個沒有標頭檔案 都已經被展開了 巨集定義 都已經替換了 沒有條件編譯指令 該遮蔽的都遮蔽掉了 沒有特殊符號的輸出檔案,這個檔案的含義同...