1. 程式人生 > >iOS- define巨集定義和const常變數區別

iOS- define巨集定義和const常變數區別

define巨集定義和const常變數區別:
1.define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。
const定義的常量,在程式執行時在常量表中,系統為它分配記憶體。
2.define定義的常量,預處理時只是直接進行了替換。所以編譯時不能進行資料型別檢驗。
const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。
3.define定義表示式時要注意“邊緣效應”,例如如下定義:
#define 2+3 //我們預想的N值是5,我們這樣使用N
int N/2; //我們預想的a的值是2.5,可實際上a的值是3.5

原因在於在預處理階段,編譯器將 N/2處理成了 2+3/2;這就是巨集定義的字串替換的“邊緣效應”因此要如下定義:
#define (2+3)
const定義表示式沒有上述問題。
const定義的常量叫做常變數原因有二:
const定義常量像變數一樣檢查型別
const可以在任何地方定義常量,編譯器對它的處理過程與變數相似,只是分配記憶體的地方不同