C语言用宏计算参数个数

尽管对于现代C++而言,计算参数个数不是什么难事。不过还是看到了这个古老的用宏来做的奇淫技巧。

#include <stdio.h>

#define get_argc_(_1, _2, _3, _4, _5, _6, _7, N, ...) N
#define get_argc(...) get_argc_(__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0)

int main()
{
    int n = get_argc(1, 2, 3, 4);
    printf("%d", n);
    return 0;
}

原理其实很简单,展开后通过参数和后面的序列填上宏的参数列表,刚好就能让N对应到参数个数上。