關(guān)于define
1.用預(yù)處理指令#define聲明一個(gè)常數(shù),用以表示一年中有多少秒(忽略閏年問(wèn)題)
define SECONDS_PER_YEAR (60 60 24 *365)UL (UL為無(wú)符號(hào)長(zhǎng)整形)
2.寫(xiě)一個(gè)“標(biāo)準(zhǔn)”宏MIN句柠,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)
define MIN(A,B) ( (A) >=(B) ? (A) : (B) )
define定義的宏和const定義的常量有什么區(qū)別
答:
- define定義宏的指令咸包,程序會(huì)在預(yù)處理階段將用define所定義的內(nèi)容進(jìn)行替換桃序,因此程序在運(yùn)行時(shí),常量表中并沒(méi)有用define定義的宏烂瘫,系統(tǒng)并不為它分配內(nèi)存媒熊,而且在編譯時(shí)不會(huì)檢查數(shù)據(jù)類型,出錯(cuò)的概率會(huì)大一些坟比。
- 而用const定義的常量芦鳍,在程序運(yùn)行時(shí)是存在常量表中,系統(tǒng)會(huì)為他分配內(nèi)存葛账,而且在編譯時(shí)會(huì)進(jìn)行類型檢查怜校。
- 在使用define有一個(gè)注意點(diǎn),就是要注意define的邊緣效應(yīng)注竿。
- define在預(yù)處理階段進(jìn)行替換茄茁,const常量在編譯階段使用
- 宏不做類型檢查魂贬,僅僅進(jìn)行替換,const常量有數(shù)據(jù)類型裙顽,會(huì)執(zhí)行類型檢查
- define不能調(diào)試付燥,const常量可以調(diào)試
- define定義的常量在替換后運(yùn)行過(guò)程中會(huì)不斷地占用內(nèi)存,而const定義的常量存儲(chǔ)在數(shù)據(jù)段只有一份copy愈犹,效率更高