const,static,extern 的詳解

最近寫代碼,看到很多地方都用到const,決定寫一遍文章記錄一下

首先看到const,我們就想到宏,先看看宏和const的區(qū)別吧.

第一:const常量與宏的區(qū)別

1.define在預(yù)處理階段進(jìn)行替換,const常量在編譯階段使用

2.宏不做類型檢查,僅僅進(jìn)行替換,const常量有數(shù)據(jù)類型,會執(zhí)行類型檢查

3.define不能調(diào)試,const常量可以調(diào)試

4.define定義的常量在替換后運(yùn)行過程中會不斷地占用內(nèi)存,而const定義的常量存儲在數(shù)據(jù)段只有一份copy,效率更高

5.define可以定義一些簡單的函數(shù),const不可以

宏的定義

#define XMGUserDefaults [NSUserDefaults standardUserDefaults]

#define XMGNameKey @"name"

const的定義

CGFloat const a = 3;

第二:const的作用

const作用:?

?1.修飾右邊基本變量或者指針變量 int a int *p

?2.被const修飾變量只能讀,不能修改.

? int * const p;? // p:只讀? *p:變量

? ?int const * p1; // p1:變量 *p1:只讀

? ?const int * p2; // p2:變量 *p2:只讀

? ?const int * const p3; // p3:只讀 *p3:只讀

? ?int const * const p4; // p4:只讀 *p4:只讀

第三:const的使用

1.修飾全局變量 => 全局只讀變量 => 代替宏

NSString * const name = @"name";

2.修飾方法中參數(shù)

int a = 0;

[self test:&a];

- (void)test:(int const *)a

{

//? ? *a = 3;

}

第四:static和extern使用

static的使用

1.修飾局部變量,被static修飾局部變量,延長生命周期,跟整個(gè)應(yīng)用程序有關(guān)

* 被static修飾局部變量,只會分配一次內(nèi)存

* 被static修飾局部變量什么分配內(nèi)存? 程序一運(yùn)行就會給static修飾變量分配內(nèi)存

2.修飾全局變量,被static修飾全局變量,作用域會修改,只能在當(dāng)前文件下使用

extern的使用

聲明外部全局變量,注意:extern只能用于聲明,不能用于定義

extern工作原理:先會去當(dāng)前文件下查找有沒有對應(yīng)全局變量,如果沒有,才回去其他文件查找

第五: static和const聯(lián)合使用

// static和const聯(lián)合使用

// const修飾全局變量

// static修飾全局變量,修改作用域

static NSString * const name = @"name";

第六:extern和const聯(lián)合使用

// 規(guī)定:全局變量不能定義在自己類中,自己創(chuàng)建全局文件管理全局東西

XMGKIT_EXTERN NSString * const discover_name;

// 定義整個(gè)項(xiàng)目中全局變量

/***************發(fā)現(xiàn)*************/

NSString * const discover_name = @"name";

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內(nèi)存 并不會改變局部變量的作用域,僅僅...
    大沖哥閱讀 1,394評論 0 1
  • ### const,static,extern簡介 ### 一、const與宏的區(qū)別(面試題): * `const...
    老騷鵝閱讀 668評論 0 7
  • const,static,extern簡介一、const與宏的區(qū)別(面試題):const簡介:之前常用的字符串常量...
    BinaryRo閱讀 258評論 0 1
  • 一、const與宏的區(qū)別(面試題): const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏...
    Lucky丶晴閱讀 213評論 0 1
  • 一、const與宏的區(qū)別: const簡介:之前常用的字符串常量,一般是抽成宏,但是蘋果不推薦我們抽成宏,推薦我們...
    金約21依代閱讀 231評論 0 1