這是2016年的最后一篇博客,年初定的計劃是寫12篇博客,每月一篇,1/3轉(zhuǎn)載,2/3原創(chuàng),看來是實現(xiàn)不了了! -- 題外話。今天要寫的東西是C語言中的預處理器,我們常說的宏定義的用法。為什么要寫這個東西呢,原因很簡單:之前對預處理了解不深。如果你對C語言只是了解或者是僅僅在大學中學習過C語言,說到預處理估計你只知道下面這條語句:(因為我就是這種情況,哈哈!)
1 #define name value
我再學習預處理直接的驅(qū)動力是看了php的源碼,開頭一大推的宏定義器,之前'掌握'的一點#define的用法太少了,根本看不懂源碼中宏的處理邏輯和運行的路徑。所以再學習預處理器很有必要,里面好多東西其實并不難,只是你沒有接觸到,等你學習了,就感覺容易了。
一、宏定義和使用中的坑
這小節(jié)采用先給代碼再說明的形式,這樣你可以看看每個代碼的運行結(jié)果是否和你預期的一致!
宏是什么,宏就是#define機制把指定的參數(shù)替換的文本中,這樣的實現(xiàn)方式就是宏。使用宏定義可以抽出頻繁調(diào)用的函數(shù),加快執(zhí)行的速度。定義如下:#define name(參數(shù)) 執(zhí)行體... “參數(shù)”可以是使用逗號分隔的參數(shù)列表,這些參數(shù)可以被應(yīng)用到執(zhí)行體中,必須要注意的是“參數(shù)”的左括號必須和宏名字緊鄰,不然編輯器會報錯,或者被解釋成執(zhí)行體中的一部分。比如你寫了一個 TEST(a) a * a 調(diào)用執(zhí)行的時候?qū)懮?TEST(1) 實際執(zhí)行的是替換后的 1 * 1。
凡事都有利弊,宏定義固然使用方便,并且有著函數(shù)不可比擬的執(zhí)行速度,但是宏定義中存在不少的坑,下面就說一說這個坑。看下面的代碼:
延伸閱讀
學習是年輕人改變自己的最好方式