天天看點

定義帶參數的C宏,友善輸出調試資訊

C中調試,肯定要有輸出。而自帶的輸出總是不夠友善:

  1. 打開時輸出太多。
  2. 不知道是哪裡輸出的。

這個時候,需要自定義宏。自定義宏最麻煩的問題,怎麼自帶參數呢?吾有專用範例介紹給大家:

(__FUNCTION__如果沒有,可以使用__func__)

1.//不同平台輸出,隻要改一句即可。也可以通過ifdefine處理。
#define WX_LOG_PRINT                wx_print
 
//為了簡單化。
//有時間戳功能輸出。
#define WX_LOG_HEAD                 char timetext[64]; timestampText(timetext); WX_LOG_PRINT("%s:%s(%4d)"
#define WX_LOG_TAIL                 "\n", timetext, __FUNCTION__, __LINE__
 
#define WX_LOG_NEWLINE()            {WX_LOG_PRINT("\n"                                    );}
#define WX_LOG_HERE()               {WX_LOG_HEAD          WX_LOG_TAIL                );}
#define WX_LOG_INFO(FMT, ...)       {WX_LOG_HEAD " " FMT  WX_LOG_TAIL, ##__VA_ARGS__ );}
#define WX_LOG_TEXT(TEXT)           {WX_LOG_HEAD " " "%s" WX_LOG_TAIL, TEXT          );}
#define WX_LOG_INT(INT)             {WX_LOG_HEAD " " "%d" WX_LOG_TAIL, INT           );}
 
//channel有多個,想知道是那個輸出的,是以增加一個宏,channel->tag_name。文法如下:
#define WX_LOG_CHANNEL(FMT, channel, ...)   LOG_INFO("%s " FMT, channel->tag_name, ##__VA_ARGS__)      

print是可以輸出日志的函數,不同平台更換。

帶有時間錯、函數名、行号,在開發階段特别友善。

相信能給需要的朋友帶來便利。

繼續閱讀