
libutf8でlong double表示
mingw runtime 3.15.1 から gcc に引数 '-posix', '-ansi' , '-D__USE_MINGW_ANSI_STDIO' を与えることで long double を出力するようになりました。
printf ( "%2$s, %1$s \n", "a", "b"); のような引数の入れ替えには対応してないみたいです。
2008.12.24 sけいし
----------------------------------以下、古い情報---------------------------------------------
能書き
Mingwはmsvcrtのprintf使ってるんだけど、これ変数の入れ替えできないんですよ。困りましたね。
さらには、gccとのlong double形式の不一致(msvc8バイト、gcc12バイト)のためLong Doubleが出力できないんです。
libutf8ってのは、ユニコードに対応させる為のライブラリなんだけどこのなかのprintfが変数の入れ替えに対応してるのでした。
ReactOSからvspritfのコードひろってきて%Lf対応に改造してこいつと組み合わせればみんな幸せなprintfライブラリが完成するはず!
1.Rosのソースから以下のファイルをでっちあげた。
ros_vfprintf.c
ros_vsntprintf.c
ros_vstprintf.c
2.つぎはlinutf8の改造ですが
vfprintf.cをこんな感じ
vsnprintf.cをこんな感じ
vsprintf.cをこんな感じ
にすればいいですね。
3.libutf8のprintf関係はちと関数名がwindowsと違うのでこ
んなインタフェース書きました。
あとは。1.と3.のオブジェクトを2のlibutf8.aに足してやればいいです。
ar -ru libutf8.a ros_vstprintf.o ros_vsntprintf.o
ros_vfprintf.o win_utf8.o
(libutf8.dll.aがあるとそっちが優先されて さらに dll同士だとmsvcrtが優先されるので削除しといてください)
完成
ああ素晴らしきかなオープンソース♪
ReactOSにはいってたソースはGPLかもしれません。ソースにはGPLって書いてませんが。。。
戻る
このHPの内容に問題等
ありましたらsけいし(skeishi@yahoo.co.jp)までメールを下さい。