使用static const替代巨集

2021-07-08 09:14:21 字數 867 閱讀 9446

#define str @"hqq"
只是在預處理器裡進行文字替換,沒有型別,不做任何型別檢查,編譯器可以對相同的字串進行優化。只儲存乙份到 .rodata 段。甚至有相同字尾的字串也可以優化,你可以用gcc 編譯測試,」hello world」 與 「world」 兩個字串,只儲存前面乙個。取的時候只需要給前面和中間的位址,如果是整形、浮點型會有多份拷貝,但這些數寫在指令中。佔的只是**段而已,大量用巨集會導致二進位制檔案變大

nsstring *str = @"hqq";
共享一塊記憶體空間,就算專案中n處用到,也不會分配n塊記憶體空間,可以被修改,在編譯階段會執行型別檢查

static nsstring * const

str = @"hqq";

const nsstring *str = @"hqq";

nsstring const *str = @"hqq";

nsstring * const

str = @"hqq";

共享一塊記憶體空間,就算專案中n處用到,也不會分配n塊記憶體空間,可以根據const修飾的位置設定能否修改,在編譯階段會執行型別檢查

專案中,我一般會新建乙個const的.h和.m類檔案,然後匯入到pch檔案中,這樣專案中的所有檔案都能使用const中定義的常量了。

如:在.m檔案中

nsstring * const

str = @"hqq";

.h檔案中

extern nsstring * const

str;

static修飾過的變數或常量,不能提供外界訪問。

盡量用static const替代預處理指令

變數一定要同時用static和const來宣告,而盡量不要用預處理指令 static修飾符表示該變數僅在定義此變數的編譯單元 實現檔案,也就是.m檔案 中可見。編譯器每收到乙個編譯單元,就會 輸出乙份目標檔案 object file 如果不加static修飾符,編譯器會建立乙個外部符號 extern...

static const 作用及區別

c語言中static static 可以修飾區域性變數 全域性變數 函式 static 修飾的區域性變數存放在靜態儲存區,生命週期是整個程式結束。在定義時就要初始化,且只能初始化一次,如果沒有初始化預設值為0。static修飾的函式或者全域性變數,主要是為了限制作用域 僅限於本檔案。函式又稱內部函式...

const和static const的區別

對於c c 語言來講,const就是唯讀的意思,只在宣告中使用 static一般有2個作用,規定作用域和儲存方式.對於區域性變數,static規定其為靜態儲存方式,每次呼叫的初始值為上一次呼叫的值,呼叫結束後儲存空間不釋放 對於全域性變數,如果以檔案劃分作用域的話,此變數只在當前檔案可見 對於sta...