printf、fprintf变参函数封装
来源:互联网 发布:奥飞数据 股票 编辑:程序博客网 时间:2024/05/16 10:20
WINCE下开发的时候,为了方便调试,需要通过串口输出调试信息或者将调试信息已日志形式写入到文件。我们首先想到的的直接调用printf和fprintf输出调试信息和写文件。但这样存在的弊端是不利于编译控制,因为在出版本的时候我们一般是不需要输出或生成这些调试信息的,这就需要能够方便的对是否输出或生成调试信息进行控制,最好的方法是对printf用宏定义方式重新定义,然后定义打印开关确定是否调用printf打印调试信息,最后可以调整代码如下所示:
#define DBG_PRINT // 调试输出开关#ifdef DBG_PRINT#define dbgprt(fmt,...) do{printf("DBG-PRINT:");printf(fmt,##__VA_ARGS__);}while(0)#else#define dbgprt(fmt,...) #endif
对于写日志信息到文件,也可以将fprintf的封装成类似于printf函数一样的接口,这样在需要输出调试信息的时候就会很方便的调用了。以下通过对fprintf封装重新定义了一套输出调试信息到文件接口。
/********************************************************************created:2011-09-26author:firehood*********************************************************************///////////////////////////////////////////////////////////////////////#include <stdarg.h>//////////////////////////////////////////////////////////////////////#define PRINT_LOG // 打印输出开关#ifdef PRINT_LOGvoid DbgPrintToFileStart(void);void DbgPrintToFile(const TCHAR *format,...);void DbgPrintToFileEnd(void);#define PrintStart() DbgPrintToFileStart();#define PrintLog(format,...) DbgPrintToFile(format,##__VA_ARGS__);#define PrintEnd() DbgPrintToFileEnd();#else#define PrintStart()#define PrintLog(format,...)#define PrintEnd()#endifstatic FILE *fp = NULL;void DbgPrintToFileStart(){if(!fp)fp = fopen("\\NAND2\\DbgLog.Log", "a+");}void DbgPrintToFile(const char *format,...){va_list ap;va_start(ap,format);//vprintf(format,ap); // 打印到串口if(fp) vfprintf(fp,format,ap); // 写文件va_end(ap); fflush(fp);}void DbgPrintToFileEnd(void){if(fp){fclose(fp); fp = NULL; }}//////////////////////////////////////////////////////////////////////
这样,在程序启动和退出时分别调用PrintStart()、PrintEnd(),在程序执行过程中,可以很方便的通过PrintLog()输出调试信息到文件了。
- printf、fprintf变参函数封装
- 变参标准函数的重新封装,如printf
- 封装printf等变参函数的方法
- 封装printf sprintf fprintf等可变参数函数
- printf函数,fprintf函数,sprintf函数
- 变参函数printf的理解
- 实现自己的变参函数printf
- printf与fprintf函数的区别?
- printf 与 fprintf函数的区别
- printf与fprintf函数的区别
- printf与fprintf函数的区别?
- printf与fprintf函数的区别
- fprintf sprintf printf函数用法及区别
- printf/fprintf/sprintf/snprintf输出函数
- printf、fprintf、sprintf和snprintf函数
- fprintf, printf,
- c++封装printf函数
- printf函数及sprintf函数及fprintf函数使用详解
- DataGridView控件的使用总结一下
- Oracle 11gR2 deferred segment creation 与 exp/imp 说明
- 淘宝数据魔方技术架构解析
- Oracle 11g 使用 dbms_parallel_execute 对大表进行并行update
- C#(64位系统) 解决"未能加载文件或程序集,或它的某一个依赖项..."
- printf、fprintf变参函数封装
- 获取调用函数的返回地址
- Spring2.5 Aop注解
- 软件开发人员角色定位和分工
- 15 家估值过亿美元的新兴创业公司
- SqlServer中Datetime类型用Like查找的问题
- Oracle Pipelined Table Functions 与 性能优化 说明
- 第一次面试(笔试)
- java中的io系统详解