前言:
1)輸出日志是會大量損耗系統性能
2)輸出的信息很容易會被截取到,導致信息不安全。
所以我們會在發行版(Release)取消所有的Log。如果一行一行地去注釋掉Log,顯然不是一個明確的選擇。
因此我們可以使用宏去自定義Log輸出。
最簡單的一個例子
#ifdefDEBUG#define GCLog(fmt, ...) NSLog((fmt), ##__VA_ARGS__);
#else
#define GCLog(...);
輸出當前方法名
#define GCMethod(...) NSLog(@"%s", __func__);
使用方法
GCLog(@"sdf");
使用宏自定義輸出,還可以很方便地管理輸出的內容
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函數名:%s]\n" "[行號:%d] \n"fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);#else # define DLog(...);#endif
摘自:http://blog.csdn.net/remote_roamer/article/details/7107320
參數解釋
1) __VA_ARGS__ 是一個可變參數的宏,很少人知道這個宏,這個可變參數的宏是新的C99規范中新增的,目前似乎只有gcc支持(VC6.0的編譯器不支持)。宏前面加上##的作用在于,當可變參數的個數為0時,這里的##起到把前面多余的","去掉的作用,否則會編譯出錯, 你可以試試。2) __FILE__ 宏在預編譯時會替換成當前的源文件名3) __LINE__宏在預編譯時會替換成當前的行號4) __FUNCTION__宏在預編譯時會替換成當前的函數名稱
有了以上這幾個宏,特別是有了__VA_ARGS__ ,調試信息的輸出就變得靈活多了。
摘自:http://blog.chinaunix.net/uid-22878837-id-2110544.html
博文作者:GarveyCalvin
本文版權歸作者和博客園共有,歡迎轉載,但須保留此段聲明,并給出原文鏈接,謝謝合作!