#include <stdio.h>
typedef enum CALC { ADD, SUB, MUL };
int add(int a, int b) { return a+b; }
int sub(int a, int b) { return a-b; }
int mul(int a, int b) { return a*b; }
int(*funcs[])(int, int) = {add, sub, mul};
void* func(enum CALC mode) {
return funcs[mode];
}
int main()
{
printf("num1: %d; num2: %d; mode: %d; func = %d\n", 10, 10, ADD, ( (int (*)(int,int)) (func(ADD)) )(10, 10) );
printf("num1: %d; num2: %d; mode: %d; func = %d\n", 10, 10, SUB, ( (int (*)(int,int)) (func(SUB)) )(10, 10) );
printf("num1: %d; num2: %d; mode: %d; func = %d\n", 10, 10, MUL, ( (int (*)(int,int)) (func(MUL)) )(10, 10) );
return 0;
}