SIZEOF_LONG とか

現在、rb_uint2big() 関数あたりを掘ってる最中です。そろそろ guile 方面に戻りたい気もする。
そりゃ良いのですが、rb_uint2big() の定義の中に

    big = bignew(DIGSPERLONG, 1);

みたいな記述があって DIGSPERLONG は struct RBignum の len 属性にセットされる模様なんですが、この DIGSPERLONG を掘ってみたら

#define DIGSPERLONG ((unsigned int)(SIZEOF_LONG/SIZEOF_BDIGITS))

とマクロ定義されてて SIZEOF_LONG って何だよ、と。
最初は *.[ch] で find して grep して、とかヤッてたのですが見当らず。/usr/include 方面にも無い。で、これも google 先生にお伺いを立ててみたらどうやらマクロの中で (というかプリプロで、か) sizeof が使いたい時の autoconf (automake?) のワザらしい。ruby-1.7.3 では configure に

configure:#define SIZEOF_INT $ac_cv_sizeof_int
configure:#define SIZEOF_SHORT $ac_cv_sizeof_short
configure:#define SIZEOF_LONG $ac_cv_sizeof_long
configure:#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
configure:#define SIZEOF___INT64 $ac_cv_sizeof___int64
configure:#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
configure:#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
configure:#define SIZEOF_FLOAT $ac_cv_sizeof_float
configure:#define SIZEOF_DOUBLE $ac_cv_sizeof_double

な記述が。ちなみに引数ナシで configure してみて grep かけてみたら config.h に上記の define が吐き出されておりますな。

$ grep SIZEOF config.h
#define SIZEOF_INT 4
#define SIZEOF_SHORT 2
#define SIZEOF_LONG 4
#define SIZEOF_LONG_LONG 8
#define SIZEOF___INT64 0
#define SIZEOF_OFF_T 8
#define SIZEOF_VOIDP 4
#define SIZEOF_FLOAT 4
#define SIZEOF_DOUBLE 8
$

で、ruby.h が include している模様。結構知らないコトがあって面白い。