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 している模様。結構知らないコトがあって面白い。