debug调试实现 - printf打印日志
printf 执行一次很费时间,所以需要在调试结束后,把printf去掉
1.设置一个开关/功能裁剪:打开时有printf 关闭没有
使用宏定义设计
#define DEBUG 1
#if (DEBUG == 1) //在宏定义中if判断------------------------
#define debug_printf() printf() //表示DEBUG为1时,有功能
#else
#define debug_printf() //表示DEBUG为0时,给它替换为空
#endif //if判断结束-----------------------------
2.设置宏参数
#define debug_printf(format, ...) printf(format, ##__VA_ARGS__)
format 表示参数格式
... 表示可变参数 通过宏##__VA_ARGS__传递可变参数
3.宏自动加\r\n
#define debug_printfln(format, ...) printf(format "\r\n", ##__VA_ARGS__)
format "\r\n": 字符串【常量】连接 —— c语言中 "ab""c" = "abc" [只能拼常量]
4.打印出所在的行数
在宏里面定义添加 (自动生成)
//[文件名:行号] -- 具体的日志信息
//把文件名、行号求出来,用可变参数代替
/*
*__FILE__:可以输入绝对路径加文件名 - 目前只要文件名
*使用一个字符串进行查找并输出(strrchr)
*/
//行号的宏:__LINE__
#define __FILE_NAME__ ((strtchr(__FILE__, '\\') ? (strtchr(__FILE__, '\\')+ 1 : __FILE__) //找反斜杠的时候需要用 \ 转义下
#define debug_printfln(format, ...) printf("[ %20s:%4d ] -- "format "\r\n", __FILE_NAME__, __LINE__, ##__VA_ARGS__)
总结 整体实现:
#include "string.h"
#define DEBUG 1
#if (DEBUG == 1)
#define __FILE_NAME__ ((strtchr(__FILE__, '\\') ? (strtchr(__FILE__, '\\')+ 1 : __FILE__)
//[文件名:行号] -- 具体的日志信息
#define debug_printf(format, ...) printf("[ %20s:%4d ] -- " format, __FILE_NAME__, __LINE__, ##__VA_ARGS__)
#define debug_printfln(format, ...) printf("[ %20s:%4d ] -- " format "\r\n", __FILE_NAME__, __LINE__, ##__VA_ARGS__)
#else
#define debug_printf(format, ...)
#define debug_printfln(format, ...)
#endif
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)