巨集,static、const 、extern簡介

weixin_34208283發表於2016-06-03

巨集

巨集的常見用法

  • 常用的字串要抽成巨集
  • 常用的程式碼抽成巨集
#define DCScreenW  [UIScreen mainScreen].bounds.size.width
#define DCUserDefaults [NSUserDefaults standardUserDefaults]

const

const:當有字串常量的時候,蘋果推薦我們使用const
const 的作用

  • 僅僅是用來修飾右邊的變數(只能修飾變數:基本變數,指標變數,物件變數)
  • const修飾的變數,表示只讀,不能修改
  • const書寫規範:一定要放在變數的左邊 下面兩種定義方法沒有區別
    int const a = 10;
    const int a = 10;
    int  *const p = &a; //p是隻讀的
    int  const *p = &a; //*p是隻讀的
    int  const * const p = &a; //*p是隻讀的 ,p也是隻讀的

const開發中的使用場景

  • 定義一個全域性只讀變數
  • 在方法中定義只讀引數

static

static作用

  • 修飾區域性變數
    1.延長這個區域性變數的生命週期,只要程式執行,區域性變數就會一直存在區域性;
    2.變數只會分配一次記憶體,為什麼?用static修飾的程式碼,在程式一啟動就會執行,以後就不會再執行 ;

  • 修飾全域性變數
    1.只會修改全域性變數的作用域,表示只能在當前檔案內使用;

extern

extern作用

  • 只能宣告全域性變數,不能定義變數
    注意:extern修飾的變數不能初始化

extern使用場景:一般用於宣告全域性變數

總結

static和const修飾效果

  • static和const修飾全域性變數
  • static修飾全域性變數,修改作用域,表示在當前檔案中使用
  • const修飾全域性變數,變數只讀
  • static和const一起修飾就是靜態全域性只讀變數

const與巨集的區別

  • 編譯時刻:巨集:預編譯(看見#就是預編譯) const:編譯時刻
  • 編譯檢查:巨集:不會檢查錯誤 const:會檢查錯誤
  • 巨集的好處:可以定義程式碼
  • 巨集的壞處:編譯時間過長,因此常用的字串使用const修飾
  • blog:經常使用巨集記憶體不會增加。只會分配一個記憶體,但是經常使用引用巨集的指標,就會分配多個記憶體

相關文章