天天看點

C語言雜談——預處理程式

預處理的三種用途:

1)處理宏常量及宏函數;

2)合并(include)源檔案;

3)條件性編譯。

(一)#define和#undef

宏常量

格式:

#define  别名  常數或符号

#define與typedef的差別:

typedef char* STRING;  

STRING pc1,pc2;  

這意味着pc1,pc2都是STRING類型的變量。

#define STRING char*  

這意味着pc1是字元指針變量;pc2是char類型的變量。

帶參數的宏

文字取代;

1)一般用法

#define CLASS(type)  struct type  

CLASS(book)  

{  

    int pages;  

    double length;  

    double width;  

}  

處理後變成為:

struct book  

2)跨行的宏

使用“\”可将宏定義切分為數行。

如:

//第一個宏  

#define CLASS(type)\  

struct type\  

//第二個宏  

#define END\  

};  

//使用宏  

END;  

預處理後:

3)##的用法

//定義宏  

#define FUN(type)\  

type * type_function()  

FUN(int)  

int * type_function()  

type_function是一個完整的名稱,其中的type并不是參數。

type * type##_function()  

int * int_function()  

type##表明此type是參數。

定義數學表達式:

1)表達式必須用小括号包覆;

2)參數必須用小括号包覆;

3)參數中避免出現“++”“—”。

例:

#define max(x,y)  ((x)>(y) ? (x):(y))  

#define max3(x,y,z) max(max(x,y),(z))  

#undef (取消宏)

#define PI 3.1415926  

#undef PI  

#define ~ #undef 說明宏的有效範圍

(二)條件性編譯

#if  宏常量  

#else  

#endif  

條件編譯的用途:

1)提高查錯能力;

2)增加程式的可移植性。

(三)條件性定義

#ifdef 宏  

#ifndef 宏  

用來解決(防止)重複定義。

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

本文轉自韓兆新部落格部落格園部落格,原文連結:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/21/2781479.html,如需轉載請自行聯系原作者

繼續閱讀