なかだです。 At Sat, 9 Feb 2008 11:05:17 +0900, Yukihiro Matsumoto wrote in [ruby-dev:33665]: > |もう一点、BASEやBASE_FIGも実行時に求めるよりも定数にしたほうがい > |いのではないかと思います。 > > ここはクロスコンパイルのことは考えなくてよかったんですっけ。 try_static_assertは、ある式がコンパイル時に真に評価されるかを調 べるものなので、クロスコンパイルでも問題ありません。もっとも、そ の分効率はよくないのですが、ネイティブ用のと二重管理は面倒だった ので。 もしネイティブ用と分けるなら、こんな感じになります。 require 'mkmf' base_fig = 0 src = ("(BASE > 0) && " "(BASE * (BASE+1)) > BASE && " "(BASE * (BASE+1)) / BASE == (BASE+1)") if CROSS_COMPILING while try_static_assert(src, nil, "-DBASE=10#{'0'*base_fig}UL") base_fig += 1 end else src = %{#{COMMON_HEADERS} #include <stdio.h> /*top*/ int conftest_value() { int BASE = 10, base_fig = 0; while (#{src}) { BASE *= 10; base_fig++; } return base_fig; } int main() {printf("%d\\n", conftest_value()); return 0;} } if try_link0(src) xpopen("./conftest") do |f| base_fig = Integer(f.gets) end end end $defs << "-DBASE=1#{'0'*base_fig}UL" << "-DBASE_FIG=#{base_fig}" create_makefile('bigdecimal') -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦