Вот, придумаешь как пристроить: // PARAM_COUNT(p1, p2, ...) возвращяет количество переданных ему аргументов (от 1 до 20)
#define _PARAM_COUNT_(p20,p19,p18,p17,p16,p15,p14,p13,p12,p11,p10,p9,p8,p7,p6,p5,p4,p3,p2,p1,n,...) n
#define PARAM_COUNT(...) _PARAM_COUNT_(__VA_ARGS__,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,__NULL_INCORRECT__),