程式的編譯及預處理

2021-09-29 11:21:39 字數 1231 閱讀 3014

編譯預處理是指c語言對源程式在正常編譯之後先執行源程式中的預處理命令。預處理後源程式在被正常編譯,從而得到目標**。預處理是編譯的一部分,是編譯中最先執行的部分。

預處理

在c語言中帶#的行都是預處理命令,後面不加「;」結束符。多數編譯的預處理都放在程式頭,也可以根據需要放在的任何位置。

巨集定義

在c語言中允許用乙個識別符號來表示乙個字串,稱為巨集。巨集有有參巨集和無參巨集。

無參巨集定義

#define 識別符號 字串

eg:#define ip 7.155488995(減少程式的重複書寫,見名知義,提高程式的可讀性)

1.用巨集定義命令定義符號常量時,通常使用大寫,便於區別變數。

2.預處理對符號常量的處理只是簡單替換,不做語法檢查,只能在正式編譯中檢查出錯誤。

3.巨集可以巢狀

終止巨集命令

#undef 識別符號

eg:#deine m 50

…#undef m

#define _crt_secure_no_warnings 1

#include

"stdio.h"

#define m (y*y+3*y)

void

main()

帶參巨集定義

#define 巨集名 字串

#define sq(x) (x)(x)

sq是巨集名,x是形參,字串是(x)(x),a=sq(5);5是實參,替換巨集體**現中的形參x。替換後a=(5)*(5).

eg:求三角形的面積

#include

#define s(a,b,c)(a+b+c)/2

#define srt(a,b,c)s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c)

#define area(a,b,c) sqrt(srt(a,b,c))

void

main()

帶參巨集與函式的本質區別:

1.定義形式不同

2.處理時間不同

3.處理機制不同

4.時間和空間的開銷不同

5.帶參的巨集定義命令設法獲得多個結果,而函式的返回值只有乙個

編譯預處理

所謂編譯預處理,就是在c源程式的編譯之前,由編譯預處理程式對這些編譯預處理命令進行處理的過程。最常見的就是常量的替換。編譯預處理按功能可以分為巨集定義,檔案包含和條件編譯三類。編譯預處理命令以 開頭,下面進行詳細說明 一.巨集定義與符號常量 1.無參巨集定義 define 識別符號 字串 1 巨集名...

編譯預處理

1.巨集定義指令 1 定義變數與命令 避免幻數 在巨集定義命名時,盡量能清楚的表明功能,大寫 不能以 開頭易與內建巨集衝突 2 定義巨集函式 define max a,b a b a b int num max 6,5 6 5 6 5 用編譯時間換記憶體空間的是巨集函式 用記憶體空間換執行空間的是內...

編譯預處理

1 定義常量與命令 避免幻數 定義巨集時,避免以 開頭,以防與內建巨集定義衝突。巨集和列舉的區別 a.列舉常量是實體常量中的一種,但巨集不是實體 b.列舉常量屬於常量,但巨集不是常量 c.列舉常量具有型別,但巨集沒有型別。列舉型別主要用於限制性輸入,巨集只是預處理替換符 d.列舉只可以表示整型,巨集...