64,654
社区成员
发帖
与我相关
我的任务
分享
#define BRACKET_L() (
#define BRACKET_R() )
#define PP_NARG(...) \
PP_NARG_ ( __VA_ARGS__, PP_RSEQ_N() )
#define PP_NARG_(...) \
PP_ARG_N BRACKET_L() __VA_ARGS__ BRACKET_R()
#define PP_ARG_N( \
_1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \
_11,_12,_13,_14,_15,_16, N,...) N
#define PP_RSEQ_N() \
16,15,14,13,12,11,10, \
9,8,7,6,5,4,3,2,1,0
PP_ARG_N ( A, B, C, 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 )
除去前面_1,_2..这16个占位符,刚好3是第17个参数,也就是#define PP_ARG_N( _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, _11,_12,_13,_14,_15,_16, N,...) N 这里的N
PP_NARGS(A, B, C)
=> PP_NARG_ (A, B, C, PP_RSEQ_N())
=> PP_NARG_ (A, B, C, 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
=> PP_ARG_N BRACKET_L() A, B, C, 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 BRACKET_R()
=> PP_ARG_N ( A, B, C, 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 )
=> 3