ios中宏的使用注意點(diǎn)
前言:
不得不說在C系語言(C, Objective-C, C++.。。)中宏(macro)是個強(qiáng)大的東西, 雖然在基本的語法上面看上去是非常的簡單, 不過有時候正因?yàn)樗膹?qiáng)大和方便, 就會導(dǎo)致在使用的時候, 其中會有很多的注意點(diǎn), 如果不小心被忽略, 那么將會帶來完全不想要的結(jié)果。 所以要想靈活的使用它, 那么還是先了解一些比較好。 而且在iOS開發(fā)中如果你是使用OC, 那么你可能經(jīng)常會使用到#define(swift當(dāng)前不支持宏)
首先扔出幾個宏的定義,調(diào)用這些宏的時候分別是什么結(jié)果, 看看你能夠在不看后面的情況下, 清楚多少, 當(dāng)然, 如果很清楚, 自然可以忽略后文的八卦了。。., 因?yàn)椋?你絕對比我更了解宏。。.
1. #define PI 3.14
2. #define log(x) printf(“this is test: x = %d”, x)
3. #define log(x) printf(“this is test: ”#x“ = %d”, x)
4. #define power(x) x*x
5. #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]
6. #define print(。。.) printf(__VA_ARGS__)
7. #define RGB(r, g, b) {\
RGBA(r, g, b, 1.0f);\
}
8. #define weakify( x ) autoreleasepool{} __weak typeof(x) weak##x = x;
9. #define weakify(。。.) \ autoreleasepool {} \ metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__)
這里先不解釋上面定義的幾個宏了, 首先介紹下宏的一些基本東西
程序第一步是在預(yù)編譯之前會有一些操作, 例如刪除反斜線和換行符的組合, 將每個注釋用一個空格替代。。.
然后在進(jìn)入預(yù)編譯的時候, 會尋找可能存在的預(yù)處理指定(由#開頭), 例如C中常用的#include, 或者oc中的#import, #define.。。很多(條件編譯語句。。.)
處理#define的時候,然后預(yù)處理器會從#開始, 一直到執(zhí)行到第一個換行符(寫代碼的時候換行的作用), 自然, #define只會允許定義一行的宏, 不過正因?yàn)樯厦嫣岬降念A(yù)處理之前會刪除反斜線和換行符的組合, 所以可以利用反斜線定義多行宏, 在刪除反斜線和換行符的組合后, 邏輯上就成了一行的宏了
宏作用在預(yù)編譯時期, 其真正的效果就是代碼替換, 而且是直接替換(內(nèi)聯(lián)函數(shù)?。。。?, 這個和函數(shù)有著很大的區(qū)別, 并且正因?yàn)槭侵苯犹鎿Q, 在使用的時候就會有一些的注意點(diǎn)了, 這個在后面會給出例子
宏可以被稱為 類對象宏, 類函數(shù)宏(開篇給的幾個宏中都已經(jīng)囊括了這兩類)
定義宏的語法很簡單, 一個宏定義由三部分組成 , 三分部之間用空格分開, #define, 宏的名字, 主體 例如第一個宏#define PI(宏的名字) 3.14(主體), 這里有個注意點(diǎn)就是, 宏的命名和普通的變量命名規(guī)則相同
宏在預(yù)處理階段只進(jìn)行文本的替換(相當(dāng)于把代碼拷貝粘貼), 不會進(jìn)行具體的計(jì)算(發(fā)生在編譯時期)
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
ios中宏的使用注意點(diǎn)下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問題? 377
- 華為全新鴻蒙蓄勢待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋果手機(jī)系統(tǒng)iOS 17遭用戶質(zhì)疑 731
- iPhone12輻射超標(biāo)?蘋果推送iOS 17.1解決此事 750
- rthread記錄一次編譯報(bào)錯:undefined reference to `rt_strcmp' 97
- 傳華為囤積零部件 目標(biāo)明年智能手機(jī)出貨7000萬部;消息稱 MiOS 僅限國內(nèi),小米 28208
- 蘋果推送iOS17.0.3,解決iPhone15Pro系列存在機(jī)身過熱 216
- Testin云測兼容和真機(jī)服務(wù)平臺中上線iPhone 15系列手機(jī) 208
- 利爾達(dá)推出搭載HooRiiOS的Matter模組 145
- 運(yùn)放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128