#include <iostream>
#define PARA_COUNT(...) PARA_COUNT_(0, ## __VA_ARGS__, NUM_SEQUENCE())
#define NUM_SEQUENCE() 8,7,6,5,4,3,2,1,0
#define PARA_COUNT_(...) PARA_COUNT_N(__VA_ARGS__)
#define PARA_COUNT_N( _1,_2,_3,_4,_5,_6,_7,_8,_9,N,...) N
using namespace std;
int main()
{
cout << PARA_COUNT() << endl; // 输出 0
cout << PARA_COUNT(1) << endl; // 输出 1
cout << PARA_COUNT(1,"2") << endl; // 输出 2
return 0;
}
总结
// 假设宏内只有一个参数x,那么
0, x, 8, 7, 6, 5, 4, 3, 2, 1, 0
_1, _2, _3, _4, _5, _6, _7, _8, _9, N,...
// 如果宏内有2个参数x,y,那么
0, x, y, 8, 7, 6, 5, 4, 3, 2, 1, 0
_1, _2, _3, _4, _5, _6, _7, _8, _9, N,...
// 0 , ## __VA_ARGS__ 的作用是当传进来的参数为空的时候把逗号去除