看了一篇講而立之年程式設計師失業的文章,觸動不小,看來以後還是要及時總結。以前總結的東西總是放在本地文件,管理起來不方便,還是老老實實寫部落格吧。
使用#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,非 和 的情...