iOS:你真的理解你在用的自定義NSLog嗎袱结?

自定義NSLog
我們在調(diào)試程序的時(shí)候恢着,往往需要輸出一些日志信息,用到NSLog函數(shù)危纫,當(dāng)我們準(zhǔn)備發(fā)布程序宗挥,需要注釋掉NSLog代碼,這個(gè)時(shí)候往往會定義一個(gè)宏种蝶,在調(diào)試的時(shí)候契耿,會輸出日志,在Release正式版本的時(shí)候螃征,會關(guān)閉日志輸出搪桂。代碼如下:

#ifdef DEBUG
#define CLog(format, ...) NSLog(format, ## __VA_ARGS__)
#else
#define CLog(format, ...)
#endif

上面這段代碼,是最常見的自定義NSLog的方式盯滚,但是上面的這段代碼有一定的局限性踢械,就是日志信息不夠明確拙泽,如果打印N多信息的話,容易造成混淆裸燎。那么顾瞻,我們該如何輸出更為詳細(xì)的日志信息呢?

#ifdef DEBUG  
# define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函數(shù)名:%s]\n" "[行號:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);  
#else  
# define DLog(...);  
#endif

筆者測試如下:


代碼
日志信息

雖然上面這段代碼用起來非常方便德绿,可能會有很多的讀者和我一樣荷荤,并不理解,為什么要這么定義移稳,里面的一些參數(shù)到底是什么意思蕴纳?

參數(shù)解釋:

  1. __VA_ARGS__是一個(gè)可變參數(shù)的宏,很少人知道這個(gè)宏个粱,這個(gè)可變參數(shù)的宏是新的C99規(guī)范中新增的古毛,目前似乎只有g(shù)cc支(VC6.0的編譯器不支持)。宏前面加上##的作用在于都许,當(dāng)可變參數(shù)的個(gè)數(shù)為0時(shí)稻薇,這里的##起到把前面多余的","去掉的作用,否則會編譯出錯(cuò), 你可以試試。
  2. __FILE__宏在預(yù)編譯時(shí)會替換成當(dāng)前的源文件名

3.__LINE__宏在預(yù)編譯時(shí)會替換成當(dāng)前的行號
4.__FUNCTION__宏在預(yù)編譯時(shí)會替換成當(dāng)前的函數(shù)名稱
有了以上這幾個(gè)宏胶征,特別是有了__VA_ARGS__塞椎,調(diào)試信息的輸出就變得靈活多了。
看完這段解釋睛低,讀者應(yīng)該對自定義NSLog有更深的理解了案狠。

參考
http://www.cnblogs.com/GarveyCalvin/p/4157553.html
http://blog.csdn.net/laomai/article/details/276274
http://stackoverflow.com/questions/21873616/how-to-use-va-args-properly

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钱雷,隨后出現(xiàn)的幾起案子骂铁,更是在濱河造成了極大的恐慌,老刑警劉巖罩抗,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拉庵,死亡現(xiàn)場離奇詭異,居然都是意外死亡澄暮,警方通過查閱死者的電腦和手機(jī)名段,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門阱扬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泣懊,“玉大人,你說我怎么就攤上這事麻惶♀晒危” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵窃蹋,是天一觀的道長卡啰。 經(jīng)常有香客問我静稻,道長,這世上最難降的妖魔是什么匈辱? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任振湾,我火速辦了婚禮,結(jié)果婚禮上亡脸,老公的妹妹穿的比我還像新娘押搪。我一直安慰自己,他們只是感情好浅碾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布大州。 她就那樣靜靜地躺著,像睡著了一般垂谢。 火紅的嫁衣襯著肌膚如雪厦画。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天滥朱,我揣著相機(jī)與錄音根暑,去河邊找鬼。 笑死徙邻,一個(gè)胖子當(dāng)著我的面吹牛购裙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹃栽,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼躏率,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了民鼓?” 一聲冷哼從身側(cè)響起薇芝,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丰嘉,沒想到半個(gè)月后夯到,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饮亏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年耍贾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片路幸。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荐开,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出简肴,到底是詐尸還是另有隱情晃听,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站能扒,受9級特大地震影響佣渴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜初斑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一辛润、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧见秤,春花似錦频蛔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挣跋,卻和暖如春三圆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背避咆。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工舟肉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人查库。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓路媚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親樊销。 傳聞我的和親對象是個(gè)殘疾皇子整慎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容