通过DEBUG宏定义管理debug模式和release模式

本文介绍了如何通过宏定义在C语言中实现带有和不带前缀信息的Debug调试输出,以及如何通过定义DEBUG宏来开关调试信息。在DEBUG宏定义时,输出包含文件名、函数名和行号的调试信息;取消定义时,则不输出。这种通过宏定义的方式方便实用,便于在debug和release版本间切换。
摘要由CSDN通过智能技术生成

一.引言

  软件版本通常有debug和release两个版本,器本质上是同一套源代码,只是debug版本中为了方便代码调试包含了一些调试信息的输出,而release版本作为最终的稳定发行版本,为了提高程序的运行效率,通常会将这些调试信息删除。同一套源代码怎样实现两种模式的切换,其实很简单,通过DEBUG宏定义的是能与否来决定是否输出调试信息。下面以C语言中常用的两种实现方式为例进行演示,其中第一种包含调试信息的属性信息,用起来更加方便。而第二中通常是内核中调试输出的方法。

二.带有前缀信息的debug调试输出

  当我们想要输出debug调试信息时就定义DEBUG宏,不想输出调试信息时就关闭DEBUG宏(undef).

#include<stdio.h>

/* 输出有前缀信息 */
#define DEBUG		//定义DEBUG宏,表示开启debug调试输出
//#undef DEBUG		//取消定义DEBUG宏,表示关闭debug调试输出

#ifdef DEBUG
#define debug(...) fprintf(stderr, " debug(%s, %s(), %d): ", __FILE__, __FUNCTION__, __LINE__); fprintf(stderr, __VA_ARGS__)
#else
#define debug(...)
#endif

//函数声明
int add(int a,int b);

int main(int argc,char *argv[])
{
	int a = 1;
	int b = 2;
	int c = a+b;
	debug("c = %d\r\n",c);
	int result = add(3,4);
	debug("add(3,4)=%d\r\n",result);
	return 0;
}
int add(int a,int b)
{
	debug("add函数测试\r\n");
	return a+b;
}

输出结果:

 debug(test.c, main(), 21): c=3
 debug(test.c, add(), 28): add函数测试
 debug(test.c, main(), 23): add(3,4)=7

  当我们把undef打开之后,再执行程序就不会输出调试信息了。

三.不带有前缀信息的debug调试输出

#include<stdio.h>
/* 输出无前缀信息 */
#define DEBUG_S3C_MEM
//#undef DEBUG_S3C_MEM
#ifdef DEBUG_S3C_MEM
#define debug(fmt, args...) 	printf(fmt, ##args)
#else
#define debug(fmt, args...) 	do {} while (0)
#endif

int add(int a,int b);

int main(int argc,char *argv[])
{
	int a = 1;
	int b = 2;
	int c = a+b;
	debug("c = %d\r\n",c);
	int result = add(3,4);
	debug("add(3,4)=%d\r\n",result);
	return 0;
}
int add(int a,int b)
{
	debug("add函数测试\r\n");
	return a+b;
}

输出结果:

c=3
add函数测试
add(3,4)=7

  这个debug宏定义是内核中的用法,其中printf本是printk。当我们把undef打开之后,再执行程序就不会输出调试信息了。

四.总结

  通过宏定义来作为调试输出的开关方便实用。__FILE__等是C语言中的预定义宏,就是说这个东西是个宏定义,但是是C语言自己定义的。这些宏具有特殊的含义,譬如__FILE__表示当前正在编译的c文件的文件名。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tutu-hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值