c語言預處理程式

2021-05-26 22:04:43 字數 2811 閱讀 4590

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   /*巨集體是表示式*/

注:引用巨集只佔編譯時間,不佔執行時間。

引用巨集沒有返回值。

帶引數的巨集定義的一般形式:

#define  巨集名(參數列)   字串

如:#define  s(a,b)  a*b      /* 對巨集定義來說引數不需要指明型別 */

3.條件編譯(通常在程式除錯中)

#if  常量表示式(為非零值時執行程式段,為0時不執行)

程式段(一般是要除錯的程式段)

#endif

#ifdef   識別符號

程式段一

#else

程式段二

#endif

功能:識別符號之前已經定義,則編譯程式段一,否則執行程式段二

c語言預處理關鍵字:

#define             #undef      #include       #if        #ifdef

#ifndef              #else               #endif              #line

(注意:#前面不能留空格)

1.包含檔案(include)

#include 「檔名」一般檔案

#inlcude 《檔名》系統檔案

編譯程式以該檔名的內容來替換該控制行,通常在每個原始檔開頭出現這樣的行,是為了包含公共的#define和全程變數的說明以及函式原型。

使用#include可把其它檔案(往往是.h檔案)的內容包含進來,#include還允許巢狀使用,如:

使用#include的優點

可以把所有公共的、需要給程式各個函式共享的外部變數說明、函式原型和巨集定義、型別定義等都放在某一檔案上(通常以.h為檔案字尾)。其它檔案的開頭只須用一條#include 「該.h」檔案的語句,就可以省去重寫這些說明、定義的麻煩,而且程式結構更為清晰。如:

#include

#include

#include 「local.h」

2.巨集定義

格式:#define識別符號單詞串

編譯程式用單詞串來替換#define後出現的該識別符號。巨集定義通常有兩種用途:

1)定義常量

如:

#define yes1

#define eof-1

又如:

#define:==

#definethen

#definebegin

則可以寫出pascal風格的c程式:

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 當前時...