預處理的三種用途:
1)處理巨集常量及巨集函式;
2)合併(include)原始檔;
3)條件性編譯。
(一)#define和#undef
巨集常量格式:
#define 別名 常數或符號#define與typedef的區別:
typedef char* string;string pc1,pc2;
這意味著pc1,pc2都是string型別的變數。
#define string char*string pc1,pc2;
這意味著pc1是字元指標變數;pc2是char型別的變數。
帶引數的巨集
文字取代;
1)一般用法
#define class(type) struct typeclass(book)
處理後變成為:
struct book
2)跨行的巨集
使用「\」可將巨集定義切分為數行。
如:
//第乙個巨集#define class(type)\
struct type\
;//使用巨集
class(book)
int pages;
double length;
double width;
end;
預處理後:
struct book;
3)##的用法
//定義巨集#define fun(type)\
type * type_function()
//使用巨集
fun(int)
預處理後:
int * type_function()
type_function是乙個完整的名稱,其中的type並不是引數。
//定義巨集#define fun(type)\
type * type##_function()
//使用巨集
fun(int)
預處理後:
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 巨集
#endif
#else
用來解決(防止)重複定義。
c語言預處理程式
c語言預處理程式有三種,分別是 1.包含標頭檔案,如 include 2.巨集定義 本質是字串的替換 如 define 巨集名 串 巨集體 define pi 3.14159 undef 終止巨集定義的作用域 如 undef pi 注 雙引號內與巨集同名的字串不做巨集體展開 define r 3.0...
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 當前時...