1/* taken from ISO/IEC 9899:1999 Section 6.10.3.5 p5 */23int z[3] = {1, 0, 0};45int6f(int x)7{8 return x+1;9}1011int12t(int x)13{14 return x+2;15}1617int18m(int x, int y)19{20 return x+y;21}2223#define x 324#define f(a) f(x * (a))25#undef x2627#define x 228#define z z[0]29#define g f30#define h g(~31#define m(a) a(w)32#define w 0,133#define t(a) a34#define p() int35#define q(x) x36#define r(x,y) x ## y37#define str(x) # x3839int40test1()41{42 return f(z) == 3;43}4445int46test2(int y)47{48 return f(y+1) + f(f(z)) % t(t(g)(0) + t)(1) == 10;49}5051int52test3()53{54 return g(x+(3,4)-w) | h 5) & m55 (f)^m(m) == 3;56}5758int59test4()60{61 p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) };6263 return i[0] + i[1] + i[2] + i[3] == 33;64}6566int67test5()68{69 int i;70 char c[2][6] = { str(hello), str() };7172 for (i = 0; i < 6; i++) {73 if (c[0][i] != "hello"[i])74 return 0;75 }7677 if (c[1][0] != '\0')78 return 0;7980 return 1;81}8283int84main()85{86 if (!test1())87 return 1;88 if (!test2(2))89 return 2;90 if (!test3())91 return 3;92 if (!test4())93 return 4;94 if (!test5())95 return 5;96 return 0;97}