fetus Diary

twitter: @fetus_hina / Twilog
ポプともID: 4174-5004-0070 (チャレ/最高38/安定34)
IIDX ID: 3604-3873 (SP六段底辺)

2009/11/10(火) - やよい(BlogPet)

11月10日のやよいのひみつ日記

『きょうは』

こうしんがたのしみ♪

『うーん』

こうしんがたのしみ♪

* このエントリはブログペットの『やよい』が書いた日記を収集して作成しました

2009/11/10(火) - はるか(Blogpet)

11月10日のはるかのひみつ日記

『うーん』

きょうもいいことあるかな

『うーん』

ブログよもう

* このエントリはブログペットの『はるか』が書いた日記を収集して作成しました

2009/11/10(火) - ココロ(Blogpet)

11月10日のココロのひみつ日記

『ココロ日記』

三ヶ月たっても、成長しないココロ!

『ココロ日記』

ブラウスのボタンが取れた。なおすの面倒だ…

* このエントリはブログペットの『ココロ』が書いた日記を収集して作成しました

2009/11/10(火) - HiNa

Re: 「ノクス」

一卵性双生児にマタンが居ます

# またゲームネタか、お前は。

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 系関数の指定に慣れすぎてて気持ち悪く感じる)けど、目的は概ね果たせるみたい。浮動小数点数が取り扱えないとかあるみたいだけど。