1編譯時與運行時
.define是宏定義,程序在預處理階段將用define定義的內容進行了替換。所以編譯時不能進行數據類型檢驗。因此程序運行時,常量表中并沒有用define定義的常量,系統不為它分配內存。
const定義的常量,在編譯時進行嚴格的類型檢驗,可以避免出錯。在程序運行時在常量表中,系統為它分配內存。
2.define定義表達式時要注意“邊緣效應”,例如如下定義:
#defineN2+3//我們預想的N值是5,我們這樣使用N
inta=N/2;//我們預想的a的值是2,可實際上a的值是3
原因在于在預處理階段,編譯器將a=N/2處理成了a=2+3/2;這就是宏定義的字符串替換的“邊緣效應”因此要如下定義:
#defineN(2+3)
const定義表達式沒有上述問題。