C语言-调试程序的可变参数宏
<p style="text-indent: 2em;">在程序的开发和调试过程中,可以使用一个宏定义来代替printf输出调试信息,等程序开发完成之后,如果不需要调试信息,直接将宏定义为空就行,这样便于随时打开和关闭调试信息。这样的调试程序的宏一般是可变参数宏,因为打印函数printf是可变参数的,因此定义的宏也要求支持可变参数。</p><p style="text-indent: 2em;">可变参数宏可以接受可变数目的参数,就像可变参数的函数一样。可变参数宏也使用三个点(...)来表示宏的可变参数性。</p><p style="text-indent: 2em;">__VA_ARGS__ 宏是用来表示可变参数宏的可变参数的内容。简单的说就是将可变参数宏中的 ... 的内容原样传递给右边 __VA_ARGS__ 所在的位置。示例代码如下:</p><pre class="brush:cpp;toolbar:false PrismJs">/**
* @file test.c
* @author Ailson Jack (jackailson@foxmail.com)
* blog: www.only2fire.com
* @brief
* @version 1.0
* @date 2021-10-29
*
* @copyright Copyright (c) 2021
*
*/
#include <stdio.h>
#define __DEBUG__
// 调试程序的可变参数宏定义
#ifdef __DEBUG__
#define DEBUG_PRINT(...) printf(__VA_ARGS__)
#else
#define DEBUG_PRINT(...)
#endif
int main(void)
{
char *name = "Ailson Jack";
int age = 18;
DEBUG_PRINT("name:%s age:%d\r\n", name, age);
DEBUG_PRINT("blog: www.only2fire.com");
return 0;
}</pre><p style="text-indent: 2em;">通过屏蔽或打开程序中的 __DEBUG__ 宏,可以让调试信息输出或者不输出。</p>
暂无评论,要不要来个沙发
发表评论
JLink V9掉固件修复(灯不亮) 3Zephyr笔记2 - 在STM32F429上运行HelloWorld 2计算NandFlash要传入的行地址和列地址 1Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式 0Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式 0Linux MMC子系统 - 4.eMMC 5.1常用命令说明(2) 0
标签云
Linux嵌入式实用技巧ARM内核学习问题集合CC++编程语言阅读笔记汇编Linux内核完全注释Windows驱动开发计算机基础ARM11ARMv7-ASTM32IDESublimeLinux内核学习eMMCMMC子系统Ubuntu操作系统OfficeVMWareAPUEgccRTOS中断漫游世界随笔感悟开发工具软件应用编程VsCodearmccarmclang编译器ZephyrSPIJLink网卡驱动安装各种芯片库函数NFSμCOS内核sambaFlashUnix命令与脚本输入法Linux内核设计与实现gitRIFFWAVJATGFTPar8161安装centos有线上网μCGUI字库工程建立右键菜单网络文件系统Firefox百度NTFS文件系统CodeBlocksCentOS数据结构算法PhotoShop51KeilQTUltraEditscanfglibc宏定义UIDGID优先级娱乐天地SourceInsight磁盘扇区总线I2CPDFBComparePythonI2SFPUMakefileSWDCPUARP软件推荐FileZilla