まつもとさん、

Yukihiro Matsumoto wrote:

> | rb_define_const(mTest, "TEST_LONGLONG", INT2NUM(TEST_LONGLONG));
> |
> |というところで
> |
> |warning: overflow in implicit constant conversion [-Woverflow]
> |
> |が出ます。TEST_LONGLONG は以下のように定義されています。
> |
> |#define INT64_LITERAL(val)     (val##LL)
> |#define TEST_LONGLONG  INT64_LITERAL(0xFF00000000000000)
> 
> これは自作プログラムでということでしょうか。RubyのINT2NUMや
> LONG2NUMが変換できるのはそれぞれint/longの範囲内なので、long
> longを与えると警告の通りオーバーフローします。long longのある
> 環境では LL2NUM()マクロが使えると思います。

はい、とあるCのライブラリのAPIをRubyから呼び出す拡張モジュールを書いてます。

おっしゃるとおりLL2NUM()の使用でwarningがなくなりました。ありがとうございました。

どうも数年ぶりに拡張モジュール書いてるんで知識が古すぎるようです。
README.EXT[.ja]にもLL2NUMは書いてませんでしたし。

inaba