我們一般把一些常用的變量在pch文件中單獨寫一個宏逞刷,比如移動設(shè)備的屏寬话速,屏高寒匙,還有一些URL的前綴什么的乌助。今天在這里和大家討論的是定義一些常量罕偎,比如定義一條有多少秒:#define SECONDS_PER_DAY (60*60*24)很澄;與const (60*60*24)之間的區(qū)別。
這些用define定義宏的指令颜及,在程序預(yù)處理階段只是用定義的內(nèi)容進行替換,因此在程序運行的時候甩苛,常量表中是沒有這個用#define所定義的宏的,系統(tǒng)也并不會為它分配內(nèi)存空間俏站,而且在編譯時也不會檢測它的數(shù)據(jù)類型是否匹配讯蒲,只有在運行時才會進行檢測,出錯的概率相對大一點肄扎;
而const定義的常量墨林,在程序運行的時候是存放在長量表里面的,系統(tǒng)會為它分配內(nèi)存犯祠,而且在編譯時就會進行類型檢測旭等。出錯概率相對較小。
還有一點衡载,#define定義的宏要注意“邊緣效應(yīng)”搔耕,例如:
#define N 2 + 3 ?// 我們預(yù)想的N值為5;
int a = N / 2; // 這里使用的時候我們預(yù)想a的值為2.5月劈,可實際上a的值為3.5。
因為在編譯的時候就進行了替換 變成了 int a = 2 + 3 / 2 猜揪。(所以一般定義常量宏需要用()括起來)