0189-cpp.c (1167B)
1 /* taken from ISO/IEC 9899:1999 Section 6.10.3.5 p5 */ 2 3 int z[3] = {1, 0, 0}; 4 5 int 6 f(int x) 7 { 8 return x+1; 9 } 10 11 int 12 t(int x) 13 { 14 return x+2; 15 } 16 17 int 18 m(int x, int y) 19 { 20 return x+y; 21 } 22 23 #define x 3 24 #define f(a) f(x * (a)) 25 #undef x 26 27 #define x 2 28 #define z z[0] 29 #define g f 30 #define h g(~ 31 #define m(a) a(w) 32 #define w 0,1 33 #define t(a) a 34 #define p() int 35 #define q(x) x 36 #define r(x,y) x ## y 37 #define str(x) # x 38 39 int 40 test1() 41 { 42 return f(z) == 3; 43 } 44 45 int 46 test2(int y) 47 { 48 return f(y+1) + f(f(z)) % t(t(g)(0) + t)(1) == 10; 49 } 50 51 int 52 test3() 53 { 54 return g(x+(3,4)-w) | h 5) & m 55 (f)^m(m) == 3; 56 } 57 58 int 59 test4() 60 { 61 p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) }; 62 63 return i[0] + i[1] + i[2] + i[3] == 33; 64 } 65 66 int 67 test5() 68 { 69 int i; 70 char c[2][6] = { str(hello), str() }; 71 72 for (i = 0; i < 6; i++) { 73 if (c[0][i] != "hello"[i]) 74 return 0; 75 } 76 77 if (c[1][0] != '\0') 78 return 0; 79 80 return 1; 81 } 82 83 int 84 main() 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 }