由於平時在開發過程中,經常有遇到使用巨集、常量的時候。但是一直對這兩者的使用有些疑惑。尤其是對const的使用更加模糊,只知道該修飾符有很多種用法,位置不同含義不同。所以特意查詢了一下,為了以後方便自己查閱特此記錄一下。
巨集就相當於是文字替換操作,是編譯期語法,並不會占用到記憶體,因為實質上它根本就不存在於程式中。只是在預處理器裡進行文字替換,沒有型別,不做任何型別檢查,編譯器可以對相同的字串進行優化。只儲存乙份到 .rodata 段。甚至有相同字尾的字串也可以優化,你可以用gcc 編譯試,"hello world" 與 "world" 兩個字串,只儲存前面乙個。取的時候只需要給前面和中間的位址,如果是整形、浮點型會有多份拷貝,但這些數寫在指令中。佔的只是**段而已,大量用巨集會導致二進位制檔案變大。
a.巨集函式:實質上就是文字替換,只不過這裡的替換文字是函式
b.條件編譯(巨集值編譯、巨集是否定義編譯):借助巨集的條件指令,選擇性執行**
c.簡單文字替換:替換文字內容並非函式,是一些簡單的常量常量等。比如字串等
語法格式:#define 巨集文本 替換文字
常用的條件指令:
#if 如果 巨集值判斷a
#ifdef 如果定義 根據巨集是否定義b
#ifndef 如果沒定義
#elif 如果 //else if
#else 否則 與 #if 對應關係
#endif 結束標識
#undef 取消巨集和#define 定義巨集
巨集函式:
條件編譯:
簡單文字替換:
#define pi 3.14
ios 靈活使用巨集
繼承於c語言和c 中的巨集定義,oc中也可以方便有效的支援巨集定義使用,簡單的巨集定義誰都知道,比如定義乙個int型常量,string型別的字串都可以。如果複雜一些呢,比如用巨集定義實現單例,實現類的歸檔操作,其實都是可以的。就以類的歸檔操作為例,說明一下 現有巨集定義 sscodingimplem...
IOS中巨集的高階使用
先說一下本文中會提到的內容 va args file line function 等 巨集變數 先舉乙個例子,會用到上面這些巨集 cpp view plain copy define myprintf printk lch file s,line d,function s,va args file ...
ios常使用的巨集定義
專案中經常有一些重複使用的 有時我們會將其巨集定義,以便快捷使用。1.rgb顏色值轉換成uicolor物件 顏色轉換 define color r,g,b,a uicolor colorwithred r 255.0 green g 255.0 blue b 255.0 alpha a 2.十六進製...