#include <stdio.h>

#define CREATE_0()               printf("0\n")
#define CREATE_1(x1)             printf("1\n")
#define CREATE_2(x1,x2)          printf("2\n")
#define CREATE_3(x1,x2,x3)       printf("3\n")
#define CREATE_4(x1,x2,x3,x4)    printf("4\n")
#define CREATE_5(x1,x2,x3,x4,x5) printf("5\n")

#define FUNC_CHOOSER(_f1, _f2, _f3, _f4, _f5, _f6, ...) _f6
#define FUNC_RECOMPOSER(argsWithParentheses) FUNC_CHOOSER argsWithParentheses
#define CHOOSE_FROM_ARG_COUNT(...) FUNC_RECOMPOSER((__VA_ARGS__, CREATE_5, CREATE_4, CREATE_3, CREATE_2, CREATE_1, ))
#define NO_ARG_EXPANDER() ,,,,,CREATE_0
#define MACRO_CHOOSER(...) CHOOSE_FROM_ARG_COUNT(NO_ARG_EXPANDER __VA_ARGS__ ())
#define create(...) MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)

int main() {
	create();
	create(1);
	create(1, 2);
	create(1, 2, 3);
	create(1, 2, 3, 4);
	create(1, 2, 3, 4, 5);

	return 0;
}
