ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

関数を関数に渡す@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書くのめんどくさい。。ってことになるんですけどね。。