1#define debug1(...) test1(__VA_ARGS__)2#define debug2(...) test2(0, #__VA_ARGS__)3#define debug3(t, ...) ((t==1) ? test1(__VA_ARGS__):test2(__VA_ARGS__))45int6test1(int x, char *s)7{8 int i;910 if (x != 3)11 return 0;12 for (i = 0; s[i]; i++) {13 if (s[i] != "test1"[i])14 return 0;15 }16 return 1;17}1819int20test2(int x, char *s)21{22 int i;2324 for (i = 0; s[i]; i++) {25 if (s[i] != "1, 2"[i])26 return 0;27 }28 return 1;29}3031int32main()33{34 if (!debug1(3, "test1"))35 return 1;36 if (!debug2(1, 2))37 return 2;38 if (!debug3(1, 3, "test1"))39 return 3;40 if (!debug3(2, 0, "1, 2"))41 return 4;4243 return 0;44}