当前位置: 首页 > news >正文

利用宏控制打印

利用宏控制打印

在程序调试时,我们经常需要输出一些调试信息,当调试完毕后,就不再需要使用了。那怎么快速的在调试状态和发布状态切换呢?通常我们使用预编译加宏定义来处理这个问题,例如:

#ifdef DEBUG
 调试代码
#endif

如果我们使用printf来显示一些调试信息,那么每个地方都加上#ifdef和#endif就很麻烦了。我们可以定义一个DbgPrintf的函 数来专门处理这些事情,只在DbgPrintf函数内放上#ifdef和#endif就行了。但是这样代码在运行时,还是有调用一次函数的,浪费了时间。 那么可不可以利用宏定义,实现完全没有编译代码产生的宏呢?
可以尝试下面的宏代码:

#ifdef DEBUG
#define DbgPrintf printf
#else
#define DbgPrintf /\
/DbgPrintf
#endif

如果DEBUG已经定义了,那么不用说,当然是用printf去代替DbgPrintf了。
下面只分析DEBUG未定义的情形,这个宏定义 实际上是将“DbgPrintf”定义成了“//DbgPrintf”,由于续行符的作用,#define定义时不会发现注释符“//”,但是在展开到代 码之后,就成了注释符“//”了,也就是说,如果你原来的代码是DbgPrintf("%d",x);,经过这个宏展开后成了 //DbgPrintf("%d",x);,相当于自动在前面加了注释符“//”。要注意的是,续行符后面的“/”一定要顶格写,否则就不是“//”了。 另外,这个宏只能单独一行使用,因为它将该行后面的代码都注释掉了。

相关文章:

  • 思杰24x7中文技术服务上线
  • HDOJ 2015 偶数求和
  • JQUERY对RADIO,CHECKBOX,SELECT的操作常用方法大全
  • red hat 6.2 网卡启动报错
  • iptables用法详解
  • mini440开发板移植mplayer
  • 浅析Lua中table的遍历
  • Bit-map
  • CentOS下编译TFS笔记
  • PHP安装笔记
  • 产品2
  • centos下开启ssh
  • 在线检测笔记本电脑屏幕坏点
  • Ubuntu 12.10 修改窗口按键布局(buttom_layout)到右边
  • 【ACM】杭电1036:Average is not Fast Enough!
  • Bytom交易说明(账户管理模式)
  • emacs初体验
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • MaxCompute访问TableStore(OTS) 数据
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 嵌入式文件系统
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 实战|智能家居行业移动应用性能分析
  • 我有几个粽子,和一个故事
  • 云大使推广中的常见热门问题
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 从如何停掉 Promise 链说起
  • 回归生活:清理微信公众号
  • # 透过事物看本质的能力怎么培养?
  • #162 (Div. 2)
  • $().each和$.each的区别
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (zhuan) 一些RL的文献(及笔记)
  • (转载)Linux 多线程条件变量同步
  • .net 4.0发布后不能正常显示图片问题
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Micro Framework初体验(二)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • /dev下添加设备节点的方法步骤(通过device_create)
  • ?
  • ??eclipse的安装配置问题!??
  • @Service注解让spring找到你的Service bean
  • @我的前任是个极品 微博分析
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [20190401]关于semtimedop函数调用.txt
  • [Android]How to use FFmpeg to decode Android f...
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [CentOs7]iptables防火墙安装与设置