知らないうちにMinGWのprintfがまともになっていた。

先日までGCCで日本語文字列がどうのこうのということを書いていましたが、その過程でMinGWをいろいろ調べることになりました。その際に、MinGWのprintf系関数がずいぶんまともになっていることに気付きました。

MinGWのランタイムライブラリは、C99で追加されたようなものを除けば、msvcrt.dllに依存してます。これはMIcrosoft Visual C++ 6.0のライブラリです。C99に対応していないのはもちろん、long double型がVC++では64ビット、MinGWでは96ビットと異なることが原因で、"%Lf"などのlong double型用の書式が正しく動作しませんでした。

現在のMinGWでもデフォルトでは同じなのですが、-ansiオプションや-stdオプションを付けてやれば、なんと! printf系関数でlong double型の引数を渡してもちゃんと動くではないですか。そればかりか、C99で導入された"%lld"とか、"%zu"とか、"%A"などもちゃんと動くようです。これは非常に助かります。

残念ながら、まともになったのはprintf系関数だけです。scanf系関数は依然としてmsvcrt.dllのものを使っています。結果として、long double型もダメですし、C99で導入された書式も使えません。

この記事のトラックバックURL:

http://www.kijineko.co.jp/trackback/918