[奇技淫巧]c可变参数宏的某技巧

2019-07-21 08:01发布

最近写一些东西,其中一些用到可变参数宏会非常方便
并且学习到了获得可变参数宏参数数量的方法,如下
[mw_shl_code=c,true]
#define __pm_arguments_expand(...) __VA_ARGS__
#define __pm_arguments_map(
    _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17,
    _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, n, ...) n
#define __pm_arguments_count(...) __pm_arguments_expand(__pm_arguments_map(0, __VA_ARGS__,
    32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
    16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))

[/mw_shl_code]

原理是通过参数位置差获得n位置的值,其值就是参数数量(我们传过去的)的值(vs下0个参数值为1,clang下0-32都正确)


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
sppz
1楼-- · 2019-07-23 05:01
秋天 发表于 2018-11-12 16:35
不够霸气   奇淫技巧  是不是更好

你淫了
xianshasaman
2楼-- · 2019-07-23 10:08
卧槽,这个吊

一周热门 更多>