山本です。 >> なぜ警告が出るのか探していて見つけたのですが、 >> >> http://wisdom.sakura.ne.jp/programming/c/c13.html >> >> によると、int から char への変換は下位8ビットをマスクしたのと同じ挙動を >> 示すそうです。(言われてみると納得できる気もするのですが、なんか意外でした。 >> C++ の bool のような感覚で、なんとなく非負の int は非負の char になるように思い込んでました。) > >CHAR_BIT == 8 の場合は、ですね。 > >> 符合があるときもこの挙動なのか、よく調べてませんが、これが本当なら >> marshal.c の & 0xff は char へのキャストに置き換えられると思います。 > >だから、厳密にいうとまったく同じとはいえませんが、この場合はむ >しろキャストのほうが適切だと思います。 w_byte(rb_reg_options(obj), arg); はどうしましょうか? KCODE と論理和をとってる ように見えたので、将来 m17n 化したときに 128 を超えてしまうんんじゃないかと思いました。 いっそ、 int option = rb_reg_options(obj); if (option > 128) rb_bug("it's time to think about m17n"); w_byte((char)option, arg); とかしておくとか・・・