自殺関数

どうでもいいことかもだけど、

クロージャーがサポートされている言語でこれが出来るのはそれほど驚かない。が、Cでも出来てしまう。久しぶりにCodePadのお世話に。

これは間違い。単に

    *point = NULL;

がコード領域なので書き込み違反になっているだけ。実際

int main (){
    pointless();
    puts("----"); // 表示されない
    pointless();
    return 0;
}

どうしてもやりたければ弾さんが rubyでやったように

void (*lpPointless)();

void pointless(){
    fprintf(stderr, "turing off myself = 0x%X\n", (int)pointless);
    /* pointless = NULL */
    lpPointless = NULL;
}
int main (){
    lpPointless = pointless;

    lpPointless();
    puts("-----");
    lpPointless();

    return 0;
}

とかすべき。まあ意味無いんだけどね ^^;