autoPrint(i); // int. autoPrint(d); // double. autoPrint(s); // String.
#define ACat_Helper(x, y) x##y
#define ACat(x, y) ACat_Helper(x, y)
#define ACat3(x, y, z) ACat(ACat(x, y), z)
#define ACat4(a, b, c, d) ACat(ACat(a, b), ACat(c, d))
#define autoPrint(x) ACat(autoPrint_, getTyp(x))(x)
void autoPrint_int(int x) { printf("%d", x); }
void autoPrint_double(double x) { printf("%f", x); }
void autoPrint_String(char *x) { printf("%s", x); }