C語言雜談 預處理程式

2021-09-06 06:56:46 字數 1798 閱讀 4840

預處理的三種用途:

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 type

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