宏和條件編譯的結(jié)合使用

宏定義? 有參數(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)用了條件編譯的第二種情況,判斷一個宏有定義。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容