打印日志开关的定义方法

来源:互联网 发布:北大青鸟编程入门 编辑:程序博客网 时间:2024/05/16 17:28

代码中的log信息有助于日常的代码调试。但是,当代码功能已经调试完毕,对外进行发布的时候,又需要把好不容易添加上的log信息删除。而这些log以后还可能需要用到,这时如果能够定义一个打印日志的开关就好了。下面代码中定义了四种简单的log开关的例子。

#include <stdio.h>#include <stdarg.h>#define __DEBUG__ //宏开关/**************************************************//方法1://用宏DebugMessagePrint(flag)来代替 printf flag//注:使用该方法,需要使用双括号,否则会出现编译错误。//如://DebugMessagePrint(("print time: %d \n",time(NULL)));**************************************************/#ifdef __DEBUG__ #define DebugMessagePrint(flag) printf flag #else #define DebugMessagePrint(flag)  ((void)0)#endif/**************************************************//方法2://在函数体中声明一个va_list,然后用va_start函数来获//取参数列表中的参数,使用完毕后调用va_end()结束//注: 使用该方法需要包括stdarg.h头文件**************************************************/#ifdef __DEBUG__ void debug(const char *fmt, ...) { \va_list ap;        \    va_start(ap, fmt); \vprintf(fmt, ap);  \va_end(ap);        \}#elsevoid debug(const char *fmt, ...) { }#endif/**************************************************//方法3://定义宏DbgPrintf来替换printf**************************************************/#ifdef __DEBUG__#define DbgPrintf printf//使用\换行符注释#else #define DbgPrintf ((void)0)#endif/**************************************************//方法4://定义宏DBG(CODE),使用时,CODE为全部的打印内容**************************************************/#ifdef __DEBUG__//方法4#define DBG(CODE) CODE#else#define DBG(CODE)#endif void main(){int count =1;printf("Use printf : %d \n", count);DebugMessagePrint(("Use DebugMessagePrint: %d \n",count));debug("use debug: %d \n",count);DbgPrintf("use DbgPrintf: %d \n",count);DBG(printf("use DBG: %d \n",count);)}

打印结果:

Use printf : 1
Use DebugMessagePrint: 1
use debug: 1
use DbgPrintf: 1
use DBG: 1


从上面四种定义的方法看,第2种方法和第3种方法比较符合日常使用方式。



原创粉丝点击