iOS const和 define有什麼區別?

2021-09-19 14:14:09 字數 1180 閱讀 5825

(1)const和#define都可以定義常量,但是const用途更廣。

(2)const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。

(3) 有些整合化的除錯工具可以對const 常量進行除錯,但是不能對巨集常量進行除錯

1. 什麼是const ?

const是c/c++中的乙個關鍵字(修飾符), const一般用來定義乙個常量, 既然叫做常量, 即以後再也不能修改其值.

const定義常量

2. 什麼是#define?

而define, 巨集定義, 則是一條預編譯指令, 編譯器在編譯階段會將所有使用到巨集的地方簡單地進行替換. 如下圖所示 :

巨集定義的替換

3. 他們有什麼用?

const 和 define 都能定義乙個常量, 都能實現修改值修改一次, 則所有用上該常量的地方都同步改值, 一句**都不用改.

使**更易維護

提高**的效率

4. 他們有什麼區別?

相同點不同點

const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干個拷貝

const和define區別

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率比巨集定義要高

既然巨集定義能做的事const都能做, 那巨集還有什麼存在的必要麼?

存在即合理, 既然巨集定義還沒被淘汰, 那必然有它存在的道理.

巨集能做到const不能辦到的事.

5. 應該怎麼用?

const有條原則, 那就是他右邊是什麼, 什麼就不可變, 如下

const不可變原則

用const修飾函式的形參, 則能提高**的安全性, 同時減少程式設計師之間的溝通成本

函式內部只能用x和y, 不能改

巨集多用於條件編譯, 如需要對於不同的情況執行不同的**塊, 則可以使用巨集的條件編譯來進行判斷

總結在objective-c中, 隨處可見const常量, 所以大家應該大膽地使用const, 它會帶給你大大的益處. 同時, 只要某個資料是定義之後永遠都不需要也不能修改的, 請使用const!

ios const 用法總結

巨集 變數 常量區分所以盡量使用const 其次是變數 const修飾位置不同的含義1.const nsstring hscoder 漢斯哈哈哈 hscoder 不能被修改,hscoder 能被修改 2.nsstring const hscoder 漢斯哈哈哈 hscoder 不能被修改,hscod...

iOS const與巨集學習筆記

我在做專案時,發現很多開發者一般會建立一些名為constant.h public.h的檔案,在這些檔案中定義大量的巨集。有字串常量 函式 方法等。字串常量,多是介面名 介面 在使用nsuserdefaults時的key等等,這樣做的好處是,當介面 或介面名變更時,我們只需要更改constant檔案中...

預處理和 define

目錄前言 預處理 define 巨集的優缺點 巨集的優點 巨集的缺點 既然要談預處理,那麼肯定得知道預處理是什麼?程式語言的預處理的概念 在編譯之前進行的處理。c語言的預處理主要有三個方面的內容 巨集定義 檔案包含 條件編譯。預處理命令以符號 開頭。預處理命令總是占用源 中的單獨一行,並且總是以 字...