#include #define if2(a, b) switch(((a)) + ((b)) * 2) { case 3: #define else00 break; case 0: /* both false */ #define else10 break; case 1: /* true, false */ #define else01 break; case 2: /* false, true */ #define else2 break; default: /* anything not metioned */ #define fi2 } /* stupid end bracket */ int main() { int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) { printf("%d %d: ", i, j); if2 (i == 1, j == 1) printf("both\n"); else10 printf("left\n"); else01 printf("right\n"); else00 { /* <-- bracket is optional, flaw */, printf("neither\n"); if2 (i == 2, j == 2) printf("\tis 22"); printf("\n"); /* flaw: this is part of if2! */ else2 printf("\tnot 22\n"); fi2 } fi2 } return 0; }