編譯預處理是指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.列舉只可以表示整型,巨集...