根据DEBUG宏的值来选择对应的打印宏函数。当DEBUG的值为1时启动相关的打印调试语句,DEBUG的值为0时则关闭打印调试语句。 这样我们就可以很方便的通过设置DEBUG宏的值来启动与关闭我们整个工程的DBG_PRINTF打印调试信息。 03do{}while(0) 其实,上面我们封装的打印宏DBG_PRINTF还有一点缺陷,比如我们与if、else使用的时...
根据DEBUG宏的值来选择对应的打印宏函数。当DEBUG的值为1时启动相关的打印调试语句,DEBUG的值为0时则关闭打印调试语句。 这样我们就可以很方便的通过设置DEBUG宏的值来启动与关闭我们整个工程的DBG_PRINTF打印调试信息。 do{}while(0) 其实,上面我们封装的打印宏DBG_PRINTF还有一点缺陷,比如我们与if、else使用的时候...
调试时知道文件和行号,能够非常方便地找到打印处,并不会由于同样的信息打印无法区分 __FILE__ 路径和文件名称 __FUNCTION__ 函数名 __LINE__ 行号 __DATE__ 日期 __TIME__ 时间 补充:__VA_ARGS__ 是一个可变參数的宏,这个可变參数的宏是新的C99规范中新增的,眼下似乎仅仅有gcc支持(VC6.0的编译器不支...
编译型语言c是不能打印“预编译宏”的,代码在编译前的预编译步骤时,所有的宏都已经被数据代替。BBBBBB都被换成100000,再编译时已经看不到宏。编译后更只剩机器指令和数据。对于重复的常量,现代编译器通常会优化,自动归为一个数据。不需要从常量找宏 现代的IDE也会列出项目中可用的宏。找宏也简单。
是指通过宏定义来实现带参数的自定义打印函数。它可以根据用户传入的参数个数和类型,动态地生成相应的打印语句。 在C语言中,可以使用宏定义来定义带参数的自定义打印函数。通过使用宏定义中的可变参数宏(variadic macro)特性,可以实现根据参数个数和类型的不同,生成不同的打印语句。
除了使用#define预处理器来定义宏之外,也可以通过编译器参数来定义宏,具体可参考各平台的编译器参数。编译器也会在编译某文件时预定义一些宏供使用,常见的有以下几个: 宏的调试 宏不支持在运行时调试,但如果宏太过于复杂的话,出错也是难免的,因此,可以利用宏自身的特性把宏展开后的内容打印出来,来方便我们查错。
可以看到,打印出来的值是24,而不是60,因为它是单纯文本替换,不计算,所以使用宏时要加上括号。 #defineN 10#definesix (2+4)printf("%d",N*six); 这样才能打印出60。 c printf("%d",10*(2+4)); 带参数的宏 前面最大值宏函数#define max(a,b) (a>b? a:b)就是带了参数的宏。这里的替换文本...
在编码过程中,小二发现一种神奇的用法:打印时,直接使用宏定义! 于是小二决定自己尝试一把。 1 基础环境 使用的在线编译器是这个???:Coliru (stacked-crooked.com) 在线编译器,使用的 C++ ,默认编译选项是这个样子: g++-std=c++20-O2-Wall-pedantic-pthreadmain.cpp && ./a.out 1. 然后又...
C语言打印程序行号、日期方便调试程序 一、前言 平时开发C语言程序时,经常需要调试代码,C语言有一些宏,可以打印出当前的行号、文件名称、日期、时间,对程序的调试起到很大的帮助,可以快速定位问题。特别是开发单片机程序时,使用这些宏打印这些信息或者在LCD上显示程序的编译日期、时间,可以知道这个单片机上的固件是什么...
在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前运行的函数和当前的程序行。 宏打印函数在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比...