From: Tanaka Akira Date: 2013-05-14T08:00:41+09:00 Subject: [ruby-dev:47341] LONG_LONG availability 気がついてしまったのですが、Ruby 1.9.2 のころから include/ruby/ruby.h に以下のコードがあります。 #ifdef SIZEOF_LONG_LONG typedef char ruby_check_sizeof_long_long[SIZEOF_LONG_LONG == sizeof(LONG_LONG) ? 1 : -1]; #endif 手元の GNU/Linux 環境での .ext/include/x86_64-linux/ruby/config.h には次の定義があります。 #define SIZEOF_LONG_LONG 8 #define SIZEOF___INT64 0 この環境には __int64 はないんですが、SIZEOF___INT64 は定義されています。 同様に long long はなくても SIZEOF_LONG_LONG は定義されるとすると、 #ifdef SIZEOF_LONG_LONG ... #endif は常に条件が成立して、 ruby_check_sizeof_long_long はいつも定義されるように思います。 そうすると LONG_LONG が定義されていない環境ではコンパイルエラーになるはずです。 にもかかわらずそれに関する苦情をみた覚えがありません。 ということはつまり ruby を動かそうとするような環境としては 64bit 整数型 (long long や __int64) がない環境はもはや存在しない、 ということなんでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]