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

输出调试信息的方法
调试时打印信息有三种形式:
一是直接写打印函数
二是用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
#endifint 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__)
#endifint 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 );
}

C/C++调试用的宏定义相关推荐

  1. c语言中void和define,C语言里面的内联函数(inline)与宏定义(#define)探讨

    C语言里面的内联函数(inline)与宏定义(#define)探讨 先简明扼要,说下关键: 1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样 ...

  2. 巧用宏定义进行调试 (转)

    巧用宏定义进行调试 在进行程序设计时,有时我们往往不希望借住于调试工具(如:gdb, vc),而以输出调试信息的方式进行调试时,我们就可以借住于强大的宏定义来进行调试.    一.在GCC下的定义方法 ...

  3. VS(visual studio)如何查看预处理后的文件?(查看宏定义展开,头文件展开等)(注意如果要运行或调试代码,要把第一步的改回来!!!!)

    如图,右键点击项目,选择属性: 找到预处理器–>预处理到文件,选择是,点击应用 找到项目中需要查看预处理后的文件,点击编译 打开被编译文件所在文件夹 进入debug文件夹 这个main.i就是我 ...

  4. c#利用宏定义调试代码

    #define 使用 #define 来定义符号. 将符号用作传递给 #if 指令的表达式时,该表达式的计算结果为 true,如以下示例所示: #define DEBUG 说明 #define 指令不 ...

  5. 宏定义对调试代码的作用

    以如下代码为例: //head.h #ifndef __HEAD_H__ #define __HEAD_H__#define NUM1 10 #define NUM2 20 #endif//sum.c ...

  6. C语言宏定义-跟踪调试宏

    C语言宏定义-跟踪调试宏 文章目录 C语言宏定义-跟踪调试宏 1. 简介 2. 相关宏 3. 例子 1. 简介 标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预 ...

  7. [C语言] 在单片机的嵌入式开发中使用宏定义一键开关日志输出/打log调试

    前言 在编写项目时,我们通常需要日志输出来帮助我们追踪程序执行的内容,以便在出现BUG时较为方便的复现,并在调试完成后快速的关闭过于详细的LOG输出,避免干扰使用中的体验,在函数中一个一个的增加pri ...

  8. gdb调试宏定义并显示宏定义的值

    宏定义#define APLLCON0 *((volatile unsigned int *)0xFF500100),值为虚拟地址 问题: gdb跟踪调试想查看该宏的值时,如下提示:No symbol ...

  9. 巧用c语言宏定义实现自动注释调试代码,C语言宏定义中的特殊用法

    C宏定义中的特殊用法 在分析一些C源码时,经常会遇到各种宏定义操作,本文即总结一下C语言宏定义中常见的预定义宏.调试宏:宏的条件编译用法及特殊的宏关键字用法. #undef 限定宏的作用域 一般来讲宏 ...

最新文章

  1. ECSHOP商品详情页”增加自定义TITLE
  2. 奇奇seo优化软件_seo优化软件如何选择
  3. Bluetooth Low Energy 嗅探
  4. Centos7 系统下搭建.NET Core2.0+Nginx+Supervisor+Mysql环境
  5. MySQL内核:InnoDB存储引擎 卷1
  6. nagios利用pyfetion报警最新
  7. linux进入命令是什么,linux进入目录的命令是什么
  8. Spark内存管理(3)—— 统一内存管理设计理念
  9. 什么是javax.ws.rs.core.context? [ 第1部分 ]
  10. git clone 报“The project you were looking for could not be found.”
  11. inno setup读取XML文件
  12. 前端常见安装的一些环境和配置
  13. ArduinoUNO测试VEML6075紫外线传感器
  14. PicGo 安装及配置
  15. 业务流程图是什么?怎么画?
  16. 介绍谱聚类(spectral clustering)
  17. php google gmail第三方登录
  18. 一篇我觉得不错的文章
  19. 阅读笔记(Every Document Owns Its Structure: Inductive Text Classification via Graph Neural Networks)
  20. 智慧工地系统包括哪些部分

热门文章

  1. Encode Decode
  2. 学习windows powershell(文件系统导航)
  3. Nacos通过OpenAPI主动发送心跳失效问题
  4. 今日好物推荐:音频转文字软件有哪些?
  5. 视频教程-2017年软上半年软考网络工程师级别考前冲刺之第四天-软考
  6. 解决俄罗斯Lopatkin精简版Win10无法远程的问题及同类精简版系统无法远程问题
  7. Linux常用Office办公软件
  8. 计算机机房施工排名,机房监控十大品牌最新排名
  9. 如何复现大佬论文的代码?
  10. 第二节 弹性盒子( justify-content属性、align-items属性、flex-direction属性、flex-wrap属性)