iOS預(yù)處理宏使用指南

預(yù)處理宏使用指南

預(yù)處理就是對(duì)源文件進(jìn)行編譯前俭识,先對(duì)預(yù)處理部分進(jìn)行處理修壕,然后對(duì)處理后的代碼進(jìn)行編譯衅码。

常用宏說(shuō)明

#define  定義一個(gè)預(yù)處理宏
#undef   取消宏的定義
#if      編譯預(yù)處理中的條件命令定续, 相當(dāng)于C語(yǔ)法中的if語(yǔ)句
#ifdef   判斷某個(gè)宏是否被定義(#define過)粥脚, 若已定義窃肠, 執(zhí)行隨后的語(yǔ)句
#ifndef  與#ifdef相反, 判斷某個(gè)宏是否未被定義
#elif    若#if刷允, #ifdef冤留, #ifndef或前面的#elif條件不滿足碧囊, 則執(zhí)行#elif之后的語(yǔ)句, 相當(dāng)于C語(yǔ)法中的else-if
#else    與#if纤怒, #ifdef糯而, #ifndef對(duì)應(yīng), 若這些條件不滿足泊窘, 則執(zhí)行#else之后的語(yǔ)句熄驼, 相當(dāng)于C語(yǔ)法中的else
#endif   #if, #ifdef烘豹, #ifndef這些條件命令的結(jié)束標(biāo)志.
defined   與#if瓜贾, #elif配合使用, 判斷某個(gè)宏是否被定義
#pragma  說(shuō)明編譯器信息
#warning 顯示編譯警告信息
#error   顯示編譯錯(cuò)誤信息

宏的使用步驟

1.如在 "Target > Build Settings > Preprocessor Macros > Debug" 設(shè)置"DEBUG=1”携悯。

2.之后在pch或工具類中就可以這么寫了:
#ifdef DEBUG  
(debug 模式下的配置)
#else  
(release 模式下的配置)
#endif 

#ifdef使用說(shuō)明

#ifdef _XXXX   //(ifdef=>if define)
    代碼塊1
#elif defined _YYYY   //(相當(dāng)于else if)
    代碼塊2
#else
    代碼塊3
#endif

如果_XXXX已被#define或Preprocessor Macros中定義過,則對(duì)代碼塊1進(jìn)行編譯祭芦,如果沒有定義_XXXX但定義了_YYYY,則編譯代碼塊2,否則只對(duì)代碼塊3進(jìn)行編譯憔鬼。

注意:#ifdef后面接的是一個(gè)宏

#ifndef使用說(shuō)明

#ifndef _XXXX   //(ifndef=>if not define)
    代碼塊1
#else
    代碼塊2
#endif

#ifndef和#ifdef是相反的情況龟劲,如果沒有定義宏_XXXX,那么就會(huì)編譯代碼塊1,否則會(huì)編譯代碼塊2

#if使用說(shuō)明

#if 常量或表達(dá)式
    代碼塊1
#else
    代碼塊2
#endif

如果常量為真(非0)轴或,就編譯代碼塊1咸灿,否則編譯代碼塊2

注意:#if后必須是常量,不能是宏侮叮,因?yàn)楹晔沁\(yùn)行階段才有,#if是預(yù)編譯階段悼瘾,會(huì)找不到宏

最后強(qiáng)調(diào)一點(diǎn):這幾個(gè)宏定義只是決定代碼塊是否被編譯囊榜,而不是被執(zhí)行。

常用示例

1.判斷真機(jī)或模擬器

#if TARGET_OS_IOS
    NSLog(@"真機(jī)測(cè)試");
#endif

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"模擬器");
#endif

2.獲取當(dāng)前設(shè)備的iOS版本

#define kIOSVersion  [[UIDevice currentDevice].systemVersion doubleValue]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亥宿,一起剝皮案震驚了整個(gè)濱河市卸勺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烫扼,老刑警劉巖曙求,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異映企,居然都是意外死亡悟狱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門堰氓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挤渐,“玉大人,你說(shuō)我怎么就攤上這事双絮≡÷椋” “怎么了得问?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)软免。 經(jīng)常有香客問我宫纬,道長(zhǎng),這世上最難降的妖魔是什么膏萧? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任漓骚,我火速辦了婚禮,結(jié)果婚禮上向抢,老公的妹妹穿的比我還像新娘认境。我一直安慰自己,他們只是感情好挟鸠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布叉信。 她就那樣靜靜地躺著,像睡著了一般艘希。 火紅的嫁衣襯著肌膚如雪硼身。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天覆享,我揣著相機(jī)與錄音佳遂,去河邊找鬼。 笑死撒顿,一個(gè)胖子當(dāng)著我的面吹牛丑罪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤壁,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吩屹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拧抖?” 一聲冷哼從身側(cè)響起煤搜,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唧席,沒想到半個(gè)月后擦盾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淌哟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年迹卢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徒仓。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婶希,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蓬衡,到底是詐尸還是另有隱情喻杈,我是刑警寧澤彤枢,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站筒饰,受9級(jí)特大地震影響缴啡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓷们,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一业栅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谬晕,春花似錦碘裕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至不撑,卻和暖如春文兢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背焕檬。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工姆坚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人实愚。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓兼呵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腊敲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子击喂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容