#普通宏定義
#define PI 3.14 //編譯階段替換掉宏#define T1 3+4 //容易產生歧義#define T2 (3+4) //添加括號後,語義清楚float r =1.0;float area = PI * r * r;int a =2* T1 #宏替換後變成 int a =2*3+4 不符合本意
ing a =2* T2 #紅替換後變成 int a =2*(3+4) 符合本意
#undef PIfloat area = PI * r * r; #error: ‘PI’ was not declared in this scope
//引號中的宏定義不會被替換printf("%s:%f\n","PI", PI);//輸出 PI:3.14//宏定義的名字必須是合法標識符#define 0x abcd //error 不能以數字開始//宏定義中雙引號和單引號必須成對出現#define TEST11 "Z //error#define TEST2 'Z //error
二、帶有參數的宏定義
//max和min的宏定義帶參數#define MAX(a,b) (a>b ? a:b)#define MIN(a,b) (a<b ? a:b)//使用帶參數的宏定義int sum=MAX(1,2)+MIN(1,2);//替換後語句爲:int sum = (1>2 ? 1:2) + (1<2 ? 1:2)//參數個數必須宏定義時形參的個數相同MAX(1,2,3);//會報錯#undef MAX //撤銷MAX的宏定義MAX(1,2);//error: ‘MAX’ was not declared in this scope
三、跨行的宏定義 使用反引號\連接
#定義一個交換數值的多行宏,使用反斜槓連接不同行
#define SWAP(a,b) do { \
int t = 0;\
t = a; \
a = b; \
b = t; \
} while(0)