關(guān)于define
1.用預(yù)處理指令#define聲明一個(gè)常數(shù),用以表示一年中有多少秒(忽略閏年問題)
define SECONDS_PER_YEAR (60 60 24 *365)UL (UL為無符號(hào)長(zhǎng)整形)
2.寫一個(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í),常量表中并沒有用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)行過程中會(huì)不斷地占用內(nèi)存,而const定義的常量存儲(chǔ)在數(shù)據(jù)段只有一份copy,效率更高