1 #include <stdio.h> 2 3 typedef unsigned int uint32_t; 4 typedef int int32_t; 5 6 const char *boolstring(int val) { 7 return val ? "true" : "false"; 8 } 9 10 int i32_eq(int32_t a, int32_t b) { 11 return (a == b); 12 } 13 14 int i32_neq(int32_t a, int32_t b) { 15 return (a != b); 16 } 17 18 int32_t i32_eq_select(int32_t a, int32_t b, int32_t c, int32_t d) { 19 return ((a == b) ? c : d); 20 } 21 22 int32_t i32_neq_select(int32_t a, int32_t b, int32_t c, int32_t d) { 23 return ((a != b) ? c : d); 24 } 25 26 struct pred_s { 27 const char *name; 28 int (*predfunc)(int32_t, int32_t); 29 int (*selfunc)(int32_t, int32_t, int32_t, int32_t); 30 }; 31 32 struct pred_s preds[] = { 33 { "eq", i32_eq, i32_eq_select }, 34 { "neq", i32_neq, i32_neq_select } 35 }; 36 37 int main(void) { 38 int i; 39 int32_t a = 1234567890; 40 int32_t b = 345678901; 41 int32_t c = 1234500000; 42 int32_t d = 10001; 43 int32_t e = 10000; 44 45 printf("a = %12d (0x%08x)\n", a, a); 46 printf("b = %12d (0x%08x)\n", b, b); 47 printf("c = %12d (0x%08x)\n", c, c); 48 printf("d = %12d (0x%08x)\n", d, d); 49 printf("e = %12d (0x%08x)\n", e, e); 50 printf("----------------------------------------\n"); 51 52 for (i = 0; i < sizeof(preds)/sizeof(preds[0]); ++i) { 53 printf("a %s a = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, a))); 54 printf("a %s a = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, a))); 55 printf("a %s b = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, b))); 56 printf("a %s c = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, c))); 57 printf("d %s e = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(d, e))); 58 printf("e %s e = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(e, e))); 59 60 printf("a %s a ? c : d = %d\n", preds[i].name, (*preds[i].selfunc)(a, a, c, d)); 61 printf("a %s a ? c : d == c (%s)\n", preds[i].name, boolstring((*preds[i].selfunc)(a, a, c, d) == c)); 62 printf("a %s b ? c : d = %d\n", preds[i].name, (*preds[i].selfunc)(a, b, c, d)); 63 printf("a %s b ? c : d == d (%s)\n", preds[i].name, boolstring((*preds[i].selfunc)(a, b, c, d) == d)); 64 65 printf("----------------------------------------\n"); 66 } 67 68 return 0; 69 } 70