c語言預處理程式有三種,分別是:
1.包含標頭檔案,如:#include
2.巨集定義(本質是字串的替換)
如 :#define 巨集名 串(巨集體)
#define pi 3.14159注:雙引號內與巨集同名的字串不做巨集體展開#undef 終止巨集定義的作用域
如:#undef pi
#define r 3.0注:引用巨集只佔編譯時間,不佔執行時間。#define pi 3.14159
#define l 2*pi*r /*巨集體是表示式*/
引用巨集沒有返回值。
帶引數的巨集定義的一般形式:3.條件編譯(通常在程式除錯中)#define 巨集名(參數列) 字串
如:#define s(a,b) a*b /* 對巨集定義來說引數不需要指明型別 */
#if 常量表示式(為非零值時執行程式段,為0時不執行)c語言預處理關鍵字:程式段(一般是要除錯的程式段)
#endif
#ifdef 識別符號
程式段一
#else
程式段二
#endif
功能:識別符號之前已經定義,則編譯程式段一,否則執行程式段二
#define #undef #include #if #ifdef
#ifndef #else #endif #line
(注意:#前面不能留空格)
1.包含檔案(include)
#include 「檔名」一般檔案
#inlcude 《檔名》系統檔案
編譯程式以該檔名的內容來替換該控制行,通常在每個原始檔開頭出現這樣的行,是為了包含公共的#define和全程變數的說明以及函式原型。
使用#include可把其它檔案(往往是.h檔案)的內容包含進來,#include還允許巢狀使用,如:
使用#include的優點
可以把所有公共的、需要給程式各個函式共享的外部變數說明、函式原型和巨集定義、型別定義等都放在某一檔案上(通常以.h為檔案字尾)。其它檔案的開頭只須用一條#include 「該.h」檔案的語句,就可以省去重寫這些說明、定義的麻煩,而且程式結構更為清晰。如:
#include2.巨集定義#include
#include 「local.h」
格式:#define識別符號單詞串
編譯程式用單詞串來替換#define後出現的該識別符號。巨集定義通常有兩種用途:
1)定義常量
如:
#define yes1又如:#define eof-1
#define:==則可以寫出pascal風格的c程式:#definethen
#definebegin
if( i > 0) then巨集替換不僅對常量定義有價值,使程式增加可讀性,而且許多函式都可以通過巨集替換來表示,不必進行頻繁的函式呼叫,但巨集替換占有空間比函式大。begin
a := 1; b:=2;
end
巨集定義函式與普通函式的區別:
實現上,巨集函式將相應串替換到函式中,而函式只需提供乙個指向其實現**的指標。取消巨集定義:#undef yes一般只將相對比較簡單的函式用巨集實現,其速度要比函式快,但占用更多的存貯間。
3.條件編譯
c語言預處理程式提供了根據條件對程式段進行有選擇地編譯的能力,而這些控制行本身不參加編譯。
條件編譯形式如下:
#if 常量表示式
#ifdef 識別符號
#ifndef 識別符號
如:#if 常量表示式
程式段1 --常量表示式為真時編譯
#else
程式段2 --常量表示式為假時編譯
#endif
又如:#ifdefyes
…--yes 已定義時編譯
#else
…--yes 未定義時編譯
#endif
我們經常可在一些標頭檔案中見到下面語句:
#ifndef _ _this
#define _ _this
…#endif
可用它們來避免該標頭檔案被重複包含。
4.行控制
格式:#line 常量[識別符號]
常量 –給定行號
識別符號 –命名當前的輸入檔名
提示編譯程式自下行開始的源程式給出該行號。
C語言雜談 預處理程式
預處理的三種用途 1 處理巨集常量及巨集函式 2 合併 include 原始檔 3 條件性編譯。一 define和 undef 巨集常量格式 define 別名 常數或符號 define與typedef的區別 typedef char string string pc1,pc2 這意味著pc1,pc...
C語言預處理
c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...
C語言預處理
預處理 系統自動自動呼叫預處理程式對程式中 號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。預定義 一些預定義符號 常用於除錯 file 正在預編譯的源檔名 line 當前行號 只有這個是整數常量,其他是字串常量 function 當前所在函式名 date 當前日期 time 當前時...