c99 makes this much, much easier than they think:
#define ARG_16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,...) q
#define COUNT(...) ARG_16(x,##__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
#define PASTE2(a,b) a ## b
#define CALLFN(name,nargs,...) PASTE2(name,nargs)(__VA_ARGS__)
#define FOO(...) CALLFN(foo,COUNT(__VA_ARGS__),__VA_ARGS__)