Objective C 巨集定義 總結

2021-06-18 11:26:40 字數 1098 閱讀 1071

看了一篇講而立之年程式設計師失業的文章,觸動不小,看來以後還是要及時總結。以前總結的東西總是放在本地文件,管理起來不方便,還是老老實實寫部落格吧。

使用#define 來定義

1.定義常量:

#define pi 3.14 //巨集定義不要以 ; 結尾

#define say @"hello, there!"

#define say @"what the hell am i \

saying" //巨集定義比較長,可以用 \ 分開

使用:

double k = 2 * pi;

#define perimeter 2*pi

2. 定義代引數的函式

#define is_leap_year(y) y%4==0&&y%100!=0  || y%400==0

呼叫:

is_leap_year(2013)
引數列表的左括弧需要緊跟巨集名稱,中間不能有空格或者tab之類的空白字元。

一般的定義巨集,巨集名稱與值之間都是有空格的,如果引數列表的左括弧與巨集名稱之間有空格,編譯器會認為 引數列表是巨集值的開始。

巨集的引數不需要指定資料型別。

由於巨集在使用的地方展開,系統會根據上下文來確定其引數型別,因此巨集的引數不需要指定資料型別。

由於巨集的引數具體內容沒法檢查,所以應該小心運算的優先順序。盡量的多加個括弧。

3.巨集的字串化:

巨集定義引數後邊加#,那麼在呼叫巨集時,預處理程式將根據巨集引數建立c風格的常量字串

#define str(x) #x

當我們需要將引數名和值一起列印來除錯,或者動態拼湊某個類名來例項化物件:

#define chstr2(x) #x

#define chstr(x) chstr2(x)

#define cherrout(desc) \

fprintf(stderr, _file_ "(" chstr(_line_) ") warning: " #desc);

objective C之巨集定義實現單例設計模式

singleton.h 幫助實現單例設計模式 h檔案的實現 define singletonh methodname instancetype shared methodname m檔案的實現 if has feature objc arc 是arc define singletonm method...

常用巨集定義總結

今天,和一位oasis談了一些關於巨集定義的一些問題,頗有所得。特錄於此。起因是他看到open sourc中經常有這樣的原始碼,感覺無法理解 define swap a,b do while 0 總感覺這樣的定義中的do while有點蛇足的味道,感覺真的是沒有什麼必要。開始我也是這樣覺得的,因為是...

巨集定義 和 用法總結

今天學socket發現 usr include bits sockaddr.h 檔案35行有這麼一句話 1 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 二 當巨集引數是另乙個巨集的時候 需要注意的是凡巨集定義裡有用 或 的地方巨集引數是不會再展開.1,非 和 的情...