おい、Macよ

Macさんが、嫌な挙動を見せてくれた。

#include 

int
main(int argc, char *argv[])
{
    int len;
    len = snprintf(NULL, 0, "OK");
    printf("len : %d\n", len);
    return 1;
}

これをLinuxで実行すると

len : 2

となる。しかし、MacOSXだと

len : -1

となる。困った。manさんいわく、glibc2.0.6以下はメモリが足りないと-1を返す仕様らしいので、仕方ない。とりあえず、これに依存したコードはMacOSXでは暴走する。痛い。これに依存したコードはあまり無いのだけど、Cでの自作文字列構造体の操作関数では使ってるんだよな。自分で、必要なメモリを数えるしかないのかな。めんどくさ。

タイムマシーンに関するパラドックス

有名なのは『親殺しのパラドックス』だ。過去へもどって親を殺すと、自分が産まれないから親を殺せないってやつ。今日『タイムマシーンの作り方』みたいな名前の本を立ち読みしたらおもしろいのがあったので紹介。

ある教授はタイムマシーンの開発に成功した。教授は5年後の未来にタイムスリップして、論文を読み漁る。そのなかで自分の時代では未解決の定理の証明を見つける。再度もとの時間に戻り、自分の生徒達に未来で知った新しい定理を教えた。生徒達は数年かけて教わった定理に関して土台を固め、学会に提出する。そして提出された論文を過去から来た教授が読む…。

この中にパラドックスは無い。最初読んだとき、別に問題ないんじゃない?と思ったが、とんでもない問題がある。おもしろいなぁ。