役に立ちそうもないTips移転版

俺得なTipsを書き連ねるだけのブログ。

SWIGとRubyとC++と

C++のコードをSWIG使ってRubyに混ぜ混ぜしようとすると、特にVC++では

「マクロ writeの引数が少なすぎます」

などなどとコンパイラが激しくぶーたれてくれる。

……というのも、rubyのwin32.hで

#define read(f, b, s) rb_w32_read(f, b, s)
#define write(f, b, s) rb_w32_write(f, b, s)

とやっていて、この定義がC++ライブラリのiostream系のメンバ関数と衝突してくれている。
……って、VC++はCランタイムにreadもwriteもないぢゃんもともとorz
(あるのは_readと_write。ANSI Cの範囲外だから頭に_付けてんだろう)
そんなわけで、win32.hの相当部分を_付きに書き換えてやると
ちょっとしわよせもといしやわせになれます。