定义带参数的C宏,方便输出调试信息

简介: 定义带参数的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是可以输出日志的函数,不同平台更换。

带有时间错、函数名、行号,在开发阶段特别方便。

相信能给需要的朋友带来便利。

目录
相关文章
|
6月前
|
编译器 Linux C语言
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
C --- 自定义一个宏打印当前文件名、函数名、行号
C --- 自定义一个宏打印当前文件名、函数名、行号
280 0
|
移动开发 小程序 JavaScript
uniapp进行条件编译的两种方法?小程序端和H5的代表值是什么
在 UniApp 中,可以使用条件编译来根据不同的平台(小程序、H5 等)进行不同的代码处理。有两种主要的方法来实现条件编译:使用 mp 属性和条件注释。
定义带参数的C宏,方便输出调试信息
定义带参数的C宏,方便输出调试信息
68 0
|
Shell
SHELL中函数的写法、调用、参数、返回值代码范例
SHELL中函数的写法、调用、参数、返回值代码范例
123 0
VS无法断点调试,编译时为生成pdb文件,不包含调试信息(未加载任何符号)
VS无法断点调试,编译时为生成pdb文件,不包含调试信息(未加载任何符号)
505 0
C++编译提示宏重定义了,怎么办?
C++编译提示宏重定义了,怎么办?
941 0