const 和 #define的異同與使用

  • 兩者常用位置
  • 什么是const ?
  • 什么是#define?
  • 他們有什么用?
  • 他們有什么區(qū)別?

兩者常用位置

在.h中    extern NSString *const  image_icon;
在.m中    NSString *const  image_icon = @"icon";
pch包含.h后全局可用固定常量  #可替代常規(guī)的宏定義字符串常量
#define  XXLazySetView(viewName)  可以進(jìn)行大量的預(yù)處理指令 縮減代碼量
可用\進(jìn)行段落的銜接   ##對(duì)方法的拼接    

詳見 : XXLazyKit-> XXLazy有大量應(yīng)用

1. 什么是const ?

const是C/C++中的一個(gè)關(guān)鍵字(修飾符), const一般用來定義一個(gè)常量, 既然叫做常量, 以后不可修改(修飾誰誰便無法修改)

    int const *p;   //p可變   *p 不可變
    int *const p1;  //p1不可變  *p1可變

2. 什么是#define?

而define, 宏定義, 則是一條預(yù)編譯指令, 編譯器在編譯階段會(huì)將所有使用到宏的地方簡單地進(jìn)行替換. 如下圖所示 :

3. 他們有什么用?

const 和 define 都能定義一個(gè)常量, 都能實(shí)現(xiàn)修改值修改一次, 則所有用上該常量的地方都同步改值, 一句代碼都不用改.
使代碼更易維護(hù)
提高代碼的效率

4. 他們有什么區(qū)別?

相同點(diǎn)

都能定義常量

不同點(diǎn)

const定義常量從匯編的角度來看,只是給出了對(duì)應(yīng)的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù),所以,const定義的常量在程序運(yùn)行過程中只有一份拷貝,而#define定義的常量在內(nèi)存中有若干個(gè)拷貝

#define constTest 123//定義常量宏
const int abc = 123;//定義常量
    int a = constTest; //編譯時(shí)進(jìn)行宏替換,分配內(nèi)存
    int b = abc;        //此時(shí)為abc分配內(nèi)存,以后不再分配
    int c = constTest; //編譯時(shí)進(jìn)行宏替換,再次分配內(nèi)存
    int d = abc;        //不再分配內(nèi)存

編譯器通常不為普通const常量分配存儲(chǔ)空間,而是將它們保存在符號(hào)表中,這使得它成為一個(gè)編譯期間的常量,沒有了存儲(chǔ)與讀內(nèi)存的操作,使得它的效率比宏定義要高

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容