const,static,extern,宏的作用和差別?

static:

作用於變量:

1.作用於局部變量,改變其存儲方式(生命週期),變爲靜態的局部變量,編譯時分配內存,程序退出時釋放存儲單元,作用域不變;

2.作用於外部變量,外部變量本身就是缺省的靜態變量,作用域很廣,整個文件都有效甚至別的文件都可以引用,static只會改變其連接方式,變爲只有本文件內有效。

 

作用於函數:

使用static用於函數定義時,對函數的連接方式產生影響,使得函數只在本文件內部有效,對其他文件是不可見的。這樣的函數又叫作靜態函數。使用靜態函數的好處是,不用擔心與其他文件的同名函數產生干擾,另外也是對函數本身的一種保護機制。

 

const:

作用:

1.修飾右邊的基本變量和指針變量;

2.它的含義是:const修飾的變量值是不可變的,readonly。

使用場景:

1. 修飾全局變量來代替宏

2、修飾方法的參數

 

 

const和宏的區別:

1. 編譯時刻:const是編譯期,宏是預編譯期;

2. 編譯檢查:const有檢查會報編譯錯誤,宏沒有;

3. 宏能定義函數,方法,const不能;

4. 大量使用宏會導致預編譯時間過長;

 

extern:

extern作用:

只是用來獲取全局變量(包括全局靜態變量)的值,不能用於定義變量

extern工作原理:

先在當前文件查找有沒有全局變量,沒有找到,纔會去其他文件查找。

 

開發中的常用場景:

1、定義一個只能在當前文件訪問的全局常量

static  類型   const   常量名  = 初始化值

例:static NSString * const cell = @"ABC";

 

2、在多個文件中經常使用的同一個字符串常量,可以使用extern與const組合。

全局常量正規寫法:開發中便於管理所有的全局變量,通常搞一個GlobeConst文件,裏面專門定義全局變量,統一管理

GlobeConst.h 文件進行聲明:

extern NSString * const nameKey;

 

GlobeConst.m 文件進行定義:

NSString * const nameKey = @"name";

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章