调试技巧--宏打印开关

前言

    在代码调试过程中,或多或少会添加printf()函数输出调试信息来协助代码地调试工作。但当代码调试OK进入发布阶段时,将printf()都注释会造成代码混乱不符合编程规范,将其删除又会带来后续调试地不便。所以很多人采用了, 宏定义的方式来输出调试语句

正文

常见地宏定义打印开关如下:

#ifdef __DEBUG
#define DEBUG(info)    printf(info)
#else
#define DEBUG(info)
#endif
     这次方便多了,一条语句就可以了~~~ 但是,问题也随之而来了,printf是支持多个参数的,而且是不定参数,当你使用下面这样的语句时就会报错:

DEBUG("%s",msg)

这是因为,DEBUG(info)这条宏定义只支持一个参数的替换。

因此,我们希望DEBUG能够像printf那样,支持多个参数,并且这些参数刚好展开成为printf语句本身使用的参数,譬如:我们希望DEBUG("%s",msg)能够展开为printf("%s",msg)。

改进地宏定义打印开关如下:

#define __DEBUG__

#ifdef __DEBUG__
#define DPRINF(...) printf(__VA_ARGS__)  ///////宏打印函数定义
#else
#define DPRINF(...)
#endif

    用可变参数宏(variadic macros)传递可变参数表。

代码

#include 
#include 

#define __DEBUG__

#ifdef __DEBUG__
#define DPRINTF(...) printf(__VA_ARGS__)  ///////宏打印函数定义
#else
#define DPRINTF(...)
#endif

int AddInt(int dataA, int dataB)
{
	DPRINTF("%s--%d\n", __FUNCTION__, __LINE__);  ///////输出执行的函数名及行号
	return dataA + dataB;
}

void main()
{
	int printfNum = 100;
	DPRINTF("Welcome to the programming world!\n");
	DPRINTF("pritfNum = %d\n",printfNum);
	AddInt(1, 1);
	system("pause");
}







 

你可能感兴趣的:(调试技巧)