int のサイズとポインタのサイズは必ずしも同じではない

もう 7 年くらい前に作っていたプログラムを、 ふと思い立ってリコンパイルしてみた。 以前は Cygwin 1.5.5 あたりで動作確認していたんだけど、 また別の環境である MacOS X 10.6.4 で動くかどうか確認したくなったわけ。

このプログラムは POSIX C に対応できるように書いた unix 系の OS 用のライブラリ。 でも結構 GCC に依存しちゃっているような気もするけどな。

で、 リコンパイルしてみると

warning: cast from pointer to integer of different size
と警告が出る。 これは大失敗だ。 MacOS X の 64 ビット環境では int のサイズは、 ポインタのサイズとは同じじゃないんだね。 わたしが馬鹿でした。

そもそもポインタでさえ何を指すかによってサイズが異なる場合があるってことを、 そのむかし聞いたことがあるような気がする。 だけンとも、 どうせポインタのサイズも int に収まるだろうと高を括ってしまったのだ。

痛い目に遭わないとわからないものだ。