C語言之預處理命令

2022-09-08 10:57:11 字數 2755 閱讀 3700

ansi c標準規定可以在c源程式中加入一些「預處理命令」,以改進程式設計環境,提高程式設計效率。這些預處理命令不是c語言本身的組成部分,不能直接對它們進行編譯。先要對程式中的這些特殊的命令進行「預處理」,經過預處理後的程式不在包括預處理命令了,最後再由編譯程式對預處理後的源程式進行通常的編譯處理,得到可供執行的目標**。

c提供的預處理功能主要有以下3種:

1.巨集定義

2.檔案包含

3.條件編譯

分別用巨集定義命令、檔案包含命令、條件編譯命令來實現,這些命令以「#」開頭。

用乙個指定的識別符號來代表乙個字串,一般形式:

#define 識別符號 字串

例子:

#define pi 3.14

說明:

他的作用是在本程式檔案中用指定的識別符號pi來代替「3.1415926」這個字串。在預處理時,將程式中在該命令出現後的所有的pi都用「3.1415926」;我們把這些識別符號稱為「巨集名」。一般的,巨集名習慣用大寫表示,以便與變數名相區別。其次,巨集定義是在預編譯時不作正確性檢查。最後,巨集定義不是c語句,不必在行末在分號,如果新增了則會連分號一起進行置換,極易出錯。

例子:

#define  pi 3.14;

...area = 3.14*r*r;

巨集展開,語句為

area = 3.14;*r*r;//語法錯誤
帶引數的巨集定義不是進行簡單的字串替換,還要進行引數替換,一般形式:

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

例子:

//定義矩形面積s,a和b是變長

#define s(a,b) a*b

...area = s(3,2);

展開過程:

在程式中如果帶有實參的巨集(如s(3,2))則按#define命令列中指定的字串從左到右進行置換。如果串中包含形參(形如a、b),則將相應的實參代替形參。如果字串中的字元不是引數字元(形如*)則保留。替換過程如下圖

因此賦值語句展開為

area = 3*2;
例子:

#define pi 3.14

#define s(r) pi*(r)*(r)

int _tmain(int argc, _tchar* ar**)

執行結果:

r=2.0,area=28.26
注意:在巨集名與帶引數的括號之間不應加空格,否則會變成不帶引數的巨集定義,容易出錯;

例子:

#define s (r) 3.14*(r)*(r)

。。。area = s(a+1);//展開3.14*(r)*(r)(a+1)

所謂的「檔案包含」是指乙個原始檔可以將另外乙個原始檔的內容全部包含到本檔案中,c語言提供#include命令用來實現檔案包含,一般形式:

#include《檔名》 (一般是庫檔案)

#include」檔名「  (使用者自定義檔案)

下圖形象的展示了檔案包含

一般情況下,源程式中所有的行都要參加編譯,但有時候只希望在滿足一定條件下才進行編譯,這就是「條件編譯」。可以在滿足某條件時編譯一組語句,而當不滿足條件時編譯另外一組語句。

條件編譯的幾種形式:

(1)如果定義「識別符號」則執行「程式段1」

#ifdef 識別符號

程式段1

#endif

例子:

#ifdef computer_a

#define integer_size 16

#endif

(2)如果定義「識別符號」執行「程式段1」,否則執行「程式段2」

#ifdef 識別符號

程式段1

#else

程式段2

#endif

例子:

#ifdef computer_a

#define integer_size 16

#else

#define integer_size 32

#endif

(3)如果沒定義「識別符號」則執行「程式段1」

#ifndef 識別符號

程式段1

#endif

(4)如果「真」執行 「程式段1」否則執行「  程式段2」

#if 表示式

程式段1

#else

程式段2

#endif

總結:預編譯功能是c語言特有的,有利於程式的可移植性,增加程式的靈活性

c語言之預處理命令

c提供的預處理功能有 巨集定義檔案包含 條件編譯 為了與其她c語句區分,命令經常以符號 開頭。define 識別符號 字串 可以避免反覆輸入字串,後面不加 巨集定義在預設時的有效範圍是全部。也可以用 undef終止巨集定義區域。不含引數 巨集展開帶入程式 含引數 define s a,b a b i...

C語言之預處理

預處理指令 在 編譯 0和1 之前執行的指令叫預處理指令。所有的預處理指令都是以 開頭。預處理的位置是隨便寫的 預處理指令的作用域 從編寫指令的那一行開始一直到檔案結尾 undef 巨集名 從這行 開始,巨集失效 巨集名一般用大寫 或者在巨集名前加 k 代表常量 變數名一般用小寫 一 巨集定義 格式...

C語言之預處理

預處理是c語言 也包括oc 的一部分,它們是一些特殊的命令.在編譯器對c程式 或者 oc程式 進行編譯之前,編譯器會對這些預處理命令進行處理,然後將這些處理的結構與源程式一起進行編譯.預處理命令有如下特徵.1 預處理命令必須以 號開頭 2 預處理通常位於程式的開頭部分 下面一起來看一下幾種使用情況 ...