main.c
#include <stdio.h>
typedef int (*fptrOperate)(int, int);
fptrOperate operations[128] = {NULL}; // int (*operations[128])(int, int) = {NULL}
int add( int num1, int num2 ){
return num1 + num2;
}
int sub( int num1, int num2 ){
return num1 - num2;
}
int multi( int num1, int num2 ){
return num1 * num2;
}
int unko( int num1, int num2 ){
return 777; // unko
}
void initialize(){
operations['+'] = add;
operations['-'] = sub;
operations['*'] = multi;
operations['u'] = unko;
}
int evaluate(char opcode, int num1, int num2){
fptrOperate operate;
operate = operations[opcode];
return operate(num1, num2);
}
int main(int argc, const char * argv[]) {
initialize();
printf("evaluate('+',10,100)=%d\n", evaluate('+', 10, 100));
printf("evaluate('-',10,100)=%d\n", evaluate('-', 10, 100));
printf("evaluate('*',10,100)=%d\n", evaluate('*', 10, 100));
printf("evaluate('u',10,100)=%d\n", evaluate('u', 10, 100));
return 0;
}
関数のポインタの配列(=operations)を使って、
関数(=evaluate)の機能を切り替えられるようにしてみたという、サンプルコードです。
./main.o
evaluate('+',10,100)=110
evaluate('-',10,100)=-90
evaluate('*',10,100)=1000
evaluate('u',10,100)=777
参考:
どやっ!