C 言語でクロージャ?

昼休みに職場の先輩に Ruby/Rails 勉強会で聞いた関数型言語の話をちょこっと報告。

先輩は、ここ 20 〜 30 年は静的型付言語ばかり使っていて、クロージャの話をしたところ「コンパイラはどんなコード吐くの?」と興味津々。
いや、私に聞かれても (^_^;;

それから数時間後、こんなコードが送られてきました。

# include <stdio.h>

static void shunin(double kyuryo(double), double bonus(double))
{
    static const double ratio = 2;

    printf("主任がすばやく立ちました。\n");
    printf("給料は %g 円です。\n", kyuryo(ratio));
    printf("ボーナスは %g 円です。\n", bonus(ratio));
}

int main()
{
    double kihonkyu;

    static double kyuryo(double ratio)
    {
	return kihonkyu * ratio;
    }

    static double bonus(double ratio)
    {
	return kyuryo(ratio) * 4;
    }

    kihonkyu = 100;
    shunin(kyuryo, bonus);

    return 0;
}

これってクロージャ?