宏元编程——技术——变参宏

本文介绍了如何在C语言中利用宏进行元编程,特别是处理变参数宏的方法。通过示例解释了如何获取变参数宏的数量以及如何提取第n个参数。在获取数量时,利用__VA_ARGS__和长度列表生成调用列表;在提取参数时,通过TL_CAT映射并解析TL_VARIADIC_ELEM_n,但需要注意避免因参数不足导致的错误。
摘要由CSDN通过智能技术生成

获取变参数宏的个数

#define TL_VARIADIC_SIZE(...) TL_CAT(TL_VARIADIC_SIZE_I(__VA_ARGS__, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),)
#define TL_VARIADIC_SIZE_I(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, size, ...) size

说明:__VA_ARGS__和长度列表生成一个新的调用列表,然后再调用TL_VARIADIC_SIZE_I,具体的长度值就会被“挤”到size参数里

获取变参数宏的第n个参数

#define TL_VARIADIC_ELEM(n, ...)

思路,可以通过TL_CAT把TL_VARIADIC_ELEM(n,...)映射成到一堆TL_VARIADIC_ELEM_n,再在TL_VARIADIC_ELEM_n里获取第n个元素e

#define TL_VARIADIC_ELEM(n, ...) TL_CAT(TL_VARIADIC_ELEM_##n,(__VA_ARGS__))

#define TL_VARIADIC_ELEM_0(e0, ...) e0
#define TL_VARIADIC_ELEM_1(e0,e1, ...) e1
#define TL_VARIADIC_ELEM_2(e0,e1,e2, ...) e2
#define TL_VARIADIC_ELEM_3(e0,e1,e2,e3, ...) e3
#define TL_VARIADIC_ELEM_4(e0,e1,e2,e3,e4, ...) e4
#define TL_VARIADIC_ELEM_5(e0,e1,e2,e3,e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值