完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
1. 文章目的
写代码的时候经常需要通过打印trace来debug代码,于是就有了自己封装一个TRACE函数的想法。 2. 知识点 (1)打印trace的时候每一次需要打印的参数个数不是一定的。所以这里需要用到C语言的可变参数的定义。 //可变参数用...来表示 void TRACE(char *format, ...) 1 2 (2)可变参数函数需要用到的宏 需要include的文件stdarg.h va_list: 指针类型的宏,指向参数列表的参数 void va_start(va_list arg_list, last_arg): 指向参数列表中的最后一个固定参数 void va_end(va_list arg_list) : 释放参数列表指针 type va_arg(va_list arg_list, type) : 获取参数列表中的下一个参数,以type类型返回。 3. 代码实现 #include #include typedef unsigned int uint16_t; void TRACE(char *format, ...); void TRACE(char *format, ...) { va_list args_list; va_start(args_list , format); //va_start 的第一个参数为va_list变量,第二个参数为函数的最后一个固定参数 char buff[1024]; vsnprintf(buff, 1023 , format , args_list); printf("%sn",buff); va_end(args_list); } int main() { uint16_t testValue = 789; TRACE("hello world"); TRACE("The testValue = %u", testValue); return 0; } 4. 封装成自己的头文件 文件名为trace.h, 以后需要用到这个函数直接include这个头文件就可以了。 #ifndef TRACE_H_ #define TRACE_H_ #include #include typedef unsigned int uint16_t; void TRACE(char *format, ...); void TRACE(char *format, ...) { va_list args_list; va_start(args_list , format); //va_start 的第一个参数为va_list变量,第二个参数为函数的最后一个固定参数 char buff[1024]; vsnprintf(buff, 1023 , format , args_list); printf("%sn",buff); va_end(args_list); } #endif /*TRACE_H_*/ |
|
|
|
只有小组成员才能发言,加入小组>>
2357 浏览 0 评论
880浏览 2评论
523浏览 1评论
1406浏览 0评论
287浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-2 06:14 , Processed in 1.409921 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191