oh, C can do optional args without varargs calling convention!
// default value for second parameter is 3
int add(int a, int b) { return a + b; }
#define add(__a, ...) add(__a, (3,##__VA_ARGS__))
int test2(int x) { return add(x, 2); }
int test3(int x) { return add(x); }



