#include typedef int (*foo_t)(int); int foo0(int); int foo1(int); int foo2(int); int foo3(int); int foo4(int); int foo5(int); int foo6(int); int foo7(int); extern const foo_t foos[]; const foo_t foos[] = { foo0, foo1, foo2, foo3, foo4, foo5, foo6, }; int foo_dis1(int x, unsigned s) { if (s<4) if (s<2) if (s<1) return foo0(x); else return foo1(x); else if (s<3) return foo2(x); else return foo3(x); else if (s<6) if (s<5) return foo4(x); else return foo5(x); else if (s<7) return foo6(x); abort(); } int foo_dis2(int x, unsigned s) { if (s<7) return foos[s](x); abort(); } int foo_dis3(int x, unsigned s) { if (s <3) { if (s <1) return foo0(x); if (s==1) return foo1(x); return foo2(x); } if (s==3) return foo3(x); if (s <5) return foo4(x); if (s==5) return foo5(x); if (s <7) return foo6(x); return foo7(x); }