C/C++调试用的宏定义

使用宏定义进行调试信息的输出

输出调试信息的方法
调试时打印信息有三种形式:
一是直接写打印函数
二是用ifdef把打印函数包起来,但是这样频繁写ifdef,增大了写代码的压力
三就是直接define一个打印函数,需要打印信息的地方就使用这个宏就行了。

在写代码时使用 #define DEBUG 来开启宏定义调试,不需要调试时取消define就可以将所有打印调试信息的地方换成注释。

本文关注第三种方法,宏打印函数。

宏打印函数的形式
宏打印函数也有不同形式:
一是只打印用户输入的信息
二是只打印编译器生成的信息,如行数,函数名等
三是两者都打印

一般来说图方便用一,图全面用三,二感觉不常用。

另外cout与printf都可以用来写宏打印函数,但是在vs2019中用cout写宏打印函数时不能输出字符串。

一个简单的宏调试函数

大家可以复制源码,体验一波

#include<iostream>
#define DEBUG

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

int main () {
	int a = 0;
	DEBUG_PRINT ( "%d",a );
}

多种宏定义的合集

另外可以输出各种附加信息,比如文件名,代码行号,函数名,日期,时间等等
这玩意真的可以玩出花来

#include<iostream>

#define DEBUG

#ifdef DEBUG
#define DEBUG_COUT std::cout<<"\nDEBUG_COUT "
#else
#define DEBUG_COUT /\
/  std::cout
#endif

#ifdef DEBUG
#define DEBUG_COUT_INFO std::cout<<"\nDEBUG_COUT_INFO file:"<< __FILE__<<"\nDEBUG_COUT_INFO file:"<<__LINE__;
#else
#define DEBUG_COUT /\
/  std::cout<<"\n"<< __FILE__,__LINE__
#endif

#ifdef DEBUG
#define DEBUG_COUT_INFO_EX std::cout<<"\nDEBUG_COUT_INFO_EX file:"<< __FILE__<<"\nDEBUG_COUT_INFO_EX line:"<<__LINE__<<"\nDEBUG_COUT_INFO_EX user:"
#else
#define DEBUG_COUT /\
/  std::cout<<"\n"<< __FILE__,__LINE__
#endif

#ifdef DEBUG
#define DEBUG_PRINT printf("\nDEBUG_PRINT:");printf
#else
#define DEBUG_PRINT /\
/printf
#endif


#ifdef DEBUG
#define DEBUG_PRINT_INFO  printf( "\nDEBUG_PRINT_INFO file: %s;\nDEBUG_PRINT_INFO line: %d  function: %s\n",__FILE__,__LINE__,__FUNCTION__)
#else
#define DEBUG_PRINT_INFO /\
/printf
#endif

#ifdef DEBUG
#define DEBUG_PRINT_INFO_EX(format,...) printf("\nDEBUG_PRINT_INFO_EX file: %s\nDEBUG_PRINT_INFO_EX line: %d\nDEBUG_PRINT_INFO_EX function"format"\n",__FILE__, __LINE__,__FUNCTION__, ##__VA_ARGS__)
#else
#define DEBUG_PRINT_INFO_EX /\
/DEBUG_PRINT_INFO_EX(format,...) printf("FILE: %s, LINE: %d\n"format"\n",__FILE__, __LINE__, ##__VA_ARGS__)
#endif

int main () {
	int a = 0;

	DEBUG_COUT << a;
	DEBUG_COUT_INFO;
	DEBUG_COUT_INFO_EX <<a;

	DEBUG_PRINT ( "%d",a );
	DEBUG_PRINT_INFO;
	DEBUG_PRINT_INFO_EX ( "%d",a );
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值