打印日志开关的定义方法
来源:互联网 发布:北大青鸟编程入门 编辑:程序博客网 时间: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种方法比较符合日常使用方式。
- 打印日志开关的定义方法
- Android 控制日志开关的方法
- 宏定义日志打印
- 定义全局的Context和定义自己的打印日志
- 工作备忘-设置Log日志打印开关
- vss日志开关打开方法
- printk打印的模块化开关
- 自己定义的打印方法 p
- 给程序加入能打印文件名、行号、日期的日志信息,并设置debug开关
- 给程序加入能打印文件名、行号、日期的日志信息,并设置debug开关
- 一个打印日志的C宏定义——TRACEOUT
- SpringBoot 让 MyBatis 打印日志的方法
- ibatis打印sql日志的方法
- 开关宏定义的学习
- 最简单的日志开关
- C++ 打印日志方法
- 使用log4j打印日志的方法和之前的老的打印日志方法总结
- Android Log输出 log开关 日志打印器 LogUtil
- KITL 解析
- 第二章 Makefile总述
- 一些Android莫名其妙的錯誤,并探討其解決或者迴避的辦法
- 开关电源的PCB设计规范
- Map/Reduce中Join查询实现
- 打印日志开关的定义方法
- SQL 查找表名,字段名
- bjam 初接触
- Ubuntu新添加用户无法sudo问题的解决:修改sudoers
- 从PipedInputStream/PipedOutputStream谈起
- Flash的主要概念有:帧、图层、场景、元件、舞台、动作、时间轴,请你用自己的理解对这些概念进行解释
- C# int 转 16进制的字符串 in to hex string
- Qt应用程序的发布 exe文件图标设置
- WinCE Boot方式及 Bootloader架构概述