預處理的三種用途:
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,如需轉載請自行聯系原作者