宏
宏定義? 有參數(shù)? 無參數(shù)
1.無參數(shù)的宏
語法:
#define 宏名? 宏值
#define? MM 10? //這里是定義了一個(gè)宏,宏名叫做MM呛凶,宏值是10
int num = MM;? //這里使用了一個(gè)宏
執(zhí)行的原理: 就是在編譯之前男娄,把使用宏的地方,用宏值替換宏名漾稀。
宏也是有作用域的:
宏的作用域是從定義宏的那一行代碼開始模闲,一直到后面每一行都是他的作用域,沒有函數(shù)的概念崭捍。
#undef? 終結(jié)宏
如果你使用了一個(gè)undef來終結(jié)一個(gè)宏围橡,那么這個(gè)宏的作用域? 就是這個(gè)宏定義的那一行? 到? 終結(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? //這里定義了一個(gè)帶參數(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ù)可以有多個(gè)塞赂,多個(gè)參數(shù)之間用逗號(hào)隔開。#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é)合使用的場(chǎng)景宴猾,也就是常用的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模式下會(huì)輸出信息叼旋,包括方法名仇哆,行數(shù)以及你想要輸出的內(nèi)容。ALog無論在Debug還是在Release模式下都會(huì)輸出夫植。
值得注意的是:DEBUG的值要在setting里面設(shè)置為1讹剔,因?yàn)檫@是運(yùn)用了條件編譯的第二種情況,判斷一個(gè)宏有定義详民。