関数を関数に渡す@C言語
去年
http://d.hatena.ne.jp/taka_2/20071220#p1
のエントリで、JavaScriptって関数に関数渡せるなんてすげーとか思ってたわけなんですが、元々C言語でも関数ポインタってワザ(?)で出来ることに気づきました。
第35章 関数へのポインタ @猫でもわかるプログラミング
早速こんな無味乾燥なプログラムを書いてみました。
#include <stdio.h> int add(int a, int b); int sub(int a, int b); int hoge(int (*func_ptr)(), int a, int b); main() { printf("result = %d\n", hoge(add, 5, 3)); printf("result = %d\n", hoge(sub, 5, 3)); } int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int hoge(int (*func_ptr)(), int a, int b) { return func_ptr(a, b); }
結果はこう。
$ ./a result = 8 result = 2 $
おぉ!なんかオブジェクト指向っぽい!!(って思うのは僕だけ??)
しっかし、C言語久々に書くとプロトタイプ宣言めんどくさい。。
まあ、Ruby使っててJavaに戻ると、main書くのめんどくさい。。ってことになるんですけどね。。