c 语言 宏 默认参数,C/C++预处理宏可以使用默认参数值吗?

本文展示了如何通过C++预处理器定义技巧实现宏的参数数量与名称连接,提供默认参数,并演示了如何利用模板函数(如Boost.PP)的overload机制。无需依赖Boost库,使用简单的VARGS宏和CONCAT宏来完成这一功能,适合初学者了解宏编程基础。
摘要由CSDN通过智能技术生成

您正在寻找一个宏示例过载机制.

Boost.PP’s facilities.

#define MACRO_2(a, b) std::cout << a << ' ' << b;

#define MACRO_1(a) MACRO_2(a, "test") // Supply default argument

// Magic happens here:

#define MACRO(...) BOOST_PP_OVERLOAD(MACRO_, __VA_ARGS__)(__VA_ARGS__)

Demo.参数数量与宏名称连接,可以轻松实现,无需Boost,如下所示:

#define VARGS_(_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, N, ...) N

#define VARGS(...) VARGS_(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

#define CONCAT_(a, b) a##b

#define CONCAT(a, b) CONCAT_(a, b)

#define MACRO_2(a, b) std::cout << a << ' ' << b;

#define MACRO_1(a) MACRO_2(a, "test") // Supply default argument

#define MACRO(...) CONCAT(MACRO_, VARGS(__VA_ARGS__))(__VA_ARGS__)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值