宏
宏定義? 有參數(shù)? 無參數(shù)
1.無參數(shù)的宏
語法:
#define 宏名? 宏值
#define? MM 10? //這里是定義了一個宏,宏名叫做MM,宏值是10
int num = MM;? //這里使用了一個宏
執(zhí)行的原理: 就是在編譯之前,把使用宏的地方,用宏值替換宏名。
宏也是有作用域的:
宏的作用域是從定義宏的那一行代碼開始,一直到后面每一行都是他的作用域,沒有函數(shù)的概念。
#undef? 終結(jié)宏
如果你使用了一個undef來終結(jié)一個宏,那么這個宏的作用域? 就是這個宏定義的那一行? 到? 終結(jié)的這一行中間。
例子:
#define PP? 4;
#define PI? 3.14
#define R? 5
#define MianJi? PI*R*R ? ?// 求面積
2. 有參數(shù)的宏
語法:
#define 宏名(參數(shù)的標(biāo)示符)? 宏值
#define N(a)? a+10? //這里定義了一個帶參數(shù)的宏N, 參數(shù)是a? 宏值是a+10
int num = N(70); //這里調(diào)用宏, 先把70傳遞給a? ,那么宏值就變成了70+10 ,, 宏替換 就把70+10 替換 N(70);
2.如果宏值 有一部分或者全部 是調(diào)用宏的人 決定的,那么就要使用有參數(shù)的宏。
3.宏參數(shù)可以有多個,多個參數(shù)之間用逗號隔開。#define sum(a,b) a+b
例子:
#define N(a)? a+10
#define M(a)? 70;
#define Log(a) printf(a)? //printf()
#define sum(a,b) a+b? ? //ab? num1? num2? ? //num1+num2
2,條件編譯
? ? ? ? 條件編譯有2種
1.條件編譯的第一種

2.條件編譯的第二種

3.兩者結(jié)合使用的場景,也就是常用的Debug
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define DLog(...)
#endif
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
DLog,在Debug模式下會輸出信息,包括方法名,行數(shù)以及你想要輸出的內(nèi)容。ALog無論在Debug還是在Release模式下都會輸出。
值得注意的是:DEBUG的值要在setting里面設(shè)置為1,因為這是運(yùn)用了條件編譯的第二種情況,判斷一個宏有定義。
