fetus Diary
twitter: @fetus_hina / Twilog
ポプともID: 4174-5004-0070 (チャレ/最高38/安定34)
IIDX ID: 3604-3873 (SP六段底辺)
2009/11/10(火) - やよい(BlogPet)
2009/11/10(火) - はるか(Blogpet)
2009/11/10(火) - ココロ(Blogpet)
2009/11/10(火) - HiNa
printf
C 言語やそれから拝借した言語には「printf(系)関数」ってのがあって、printf("This is a %s", "pen"); とかやると、最初の引数「フォーマット」の中の "%s" とかいう記号(%s の場合は「文字列
」)を続く引数で順に置き換えるものがあるのです。
ものすごく癖が強い関数ではあるけど、便利なのも事実。
でも、多言語対応を考えるときに「置き換え部分」がすべての言語で同じ順序で現れるとは限らない。無理やり一致させた結果少々不自然な形になる程度ならともかく、文章を構築したりするとありえない順序になったりする。
じゃあどうするかっていうので、最近の C の規格では「何番目のパラメータを」というのが追加されてる。"%3$s %2$d %1$s" と、3 番目の文字列、2 番目の整数、1 番目の文字列とそれぞれ置き換えてくれる。
で、最近の Visual C++ では printf_p というものでそれに対応しているらしいのだけど、残念ながら仕事でメインに使っている Visual Studio 2003 の VC++ (7.1) では使えない。
何か無いのかなぁと探したところ、FormatMessage API を見つけた。"%1!s!" みたいにちょっと形式が違う(あまりに printf 系関数の指定に慣れすぎてて気持ち悪く感じる)けど、目的は概ね果たせるみたい。浮動小数点数が取り扱えないとかあるみたいだけど。
- コメント(0)
- 09/11/11
0:510:51