定义宏控制输出printf开关(适用于嵌入式)

文章介绍了C/C++中如何使用宏DEBUG_ON控制输出开关,并展示了使用__VA_ARGS__处理可变参数的宏定义,如DEBUG(fmt,...)printf(fmt,##__VA_ARGS__),允许灵活地传递不同数量的参数给宏。宏定义的优先级按照定义的顺序决定,最近定义的宏具有最高优先级。
摘要由CSDN通过智能技术生成

宏控制输出开关

此处DEBUG_ON 后的1为开启打印 改为0则关闭输出

/* 输出打印开关  */
#define DEBUG_ON 1
#if DEBUG_ON
#define DEBUG(...) printf(__VA_ARGS__)
#else
#define DEBUG(...)
#endif

VA_ARGS,fmt是什么

还有一种写法是

#define DEBUG(fmt, ...) printf(fmt, ##__VA_ARGS__)

__VA_ARGS__ 是 C/C++ 中的一个特殊宏,用于表示可变参数列表。在宏定义中,如果需要传递可变数量的参数,可以使用 __VA_ARGS__ 来表示这些参数。
在这个宏定义中,fmt 表示输出格式字符串,__VA_ARGS__ 表示可变参数列表。在使用这个宏时,可以像使用 printf 函数一样,传递需要输出的参数,例如:

int a = 10;
DEBUG("a = %d\n", a);

在这个例子中,"a = %d\n" 是输出格式字符串,a 是需要输出的参数。在宏定义中,__VA_ARGS__ 将会被替换为传递的参数列表,例如:

printf("a = %d\n", a);

需要注意的是,在使用 __VA_ARGS__ 时,需要在宏定义中使用 ## 连接符,以避免出现参数列表为空的情况。例如,在上面的宏定义中,##__VA_ARGS__ 表示如果参数列表为空,则忽略前面的逗号。这样可以避免出现语法错误。

宏定义优先级

宏的优先级是按定义的顺序来排的,最后定义的优先级最高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wiyoo0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值