山本です。
># なお、io.c などコールバック関数側はそのままなので、まだ警告は出ます。
すみません、警告じゃなくてコンパイルエラーになりますね。出直します。
ふと思ったのですが、rb_define_virtual_variable では
VALUE (*getter)(ID id, VALUE *var);
void (*setter)(VALUE val, ID id, VALUE *var);
の VALUE *var は使われていないと思って
VALUE (*getter)(ID id);
void (*setter)(VALUE val, ID id);
という違うコールバック型にしたのですが、var に NULL を渡すようにして
同じ型にしたほうがいいでしょうか?コールバックを書くときに混乱したので
(というか、そうすればunion を使わなくてもよかったかも)