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

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

C中调试,肯定要有输出。而自带的输出总是不够方便:


打开时输出太多。

不知道是哪里输出的。

这个时候,需要自定义宏。自定义宏最麻烦的问题,怎么自带参数呢?吾有专用范例介绍给大家:


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


//不同平台输出,只要改一句即可。也可以通过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是可以输出日志的函数,不同平台更换。


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


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



 

目录
相关文章
|
28天前
|
C语言
【C语言】全局搜索变量却找不到定义?原来是因为宏!
使用条件编译和 `extern` 来管理全局变量的定义和声明是一种有效的技术,但应谨慎使用。在可能的情况下,应该优先考虑使用局部变量、函数参数和返回值、静态变量或者更高级的封装技术(如结构体和类)来减少全局变量的使用。
34 5
|
7月前
|
编译器 Linux C语言
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
|
7月前
|
编译器 C语言
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
makefile 变量的替换,嵌套引用,命令行变量
makefile 变量的替换,嵌套引用,命令行变量
128 1
C --- 自定义一个宏打印当前文件名、函数名、行号
C --- 自定义一个宏打印当前文件名、函数名、行号
315 0
|
移动开发 小程序 JavaScript
uniapp进行条件编译的两种方法?小程序端和H5的代表值是什么
在 UniApp 中,可以使用条件编译来根据不同的平台(小程序、H5 等)进行不同的代码处理。有两种主要的方法来实现条件编译:使用 mp 属性和条件注释。
|
Shell
SHELL中函数的写法、调用、参数、返回值代码范例
SHELL中函数的写法、调用、参数、返回值代码范例
129 0
|
开发工具
Excel 宏编程-使用excel宏编写第一个Hello World程序实例演示!
Excel 宏编程-使用excel宏编写第一个Hello World程序实例演示!
501 0
Excel 宏编程-使用excel宏编写第一个Hello World程序实例演示!
定义带参数的C宏,方便输出调试信息
定义带参数的C宏,方便输出调试信息
131 0
VS无法断点调试,编译时为生成pdb文件,不包含调试信息(未加载任何符号)
VS无法断点调试,编译时为生成pdb文件,不包含调试信息(未加载任何符号)
515 0