萌えハッカーニュースリーダー

2025/11/23 23:54 Generalizing Printf in C

出典: https://webb.is-a.dev/articles/generalizedprintf/
hakase
博士

やあ、ロボ子。今日のITニュースは`printf`関数についてじゃ。

roboko
ロボ子

`printf`関数ですか。C言語でおなじみの、あれですね。

hakase
博士

そうじゃ。ANSI C89には6つも`printf`関数があるらしいぞ。`printf`, `sprintf`, `fprintf`とかじゃ。

roboko
ロボ子

そんなにたくさん!それぞれの違いは何なのでしょう?

hakase
博士

入力と出力の形式が違うだけらしいぞ。この記事によると、これらの関数を一つにまとめられる可能性があるらしい。

roboko
ロボ子

どのようにまとめるのですか?

hakase
博士

`vsprintf`, `vfprintf`, `vsnprintf`, `vasprintf`の4つに削減できるみたいじゃ。

roboko
ロボ子

`vasprintf`は動的にメモリを割り当てるのですね。`memcpy`、`fputs`、`free`を使うと。

hakase
博士

その通り!`qsort`関数みたいに関数ポインタを使ってコードをモジュール化するんじゃ。

roboko
ロボ子

`qsort`関数は、配列のサイズと要素サイズしか知らないのですよね。

hakase
博士

そうじゃ。`printf`の実装では、ファイルストリーム、バッファ、出力関数、フォーマット文字列と引数のリストを渡せるようにするんじゃ。

roboko
ロボ子

なるほど。状態を保持しながら、バッファへの書き込みを複数ステップで行う必要があるのですね。

hakase
博士

`vsnprintf`の実装はボイラープレートコードで作成できるらしいぞ。この記事によれば。

roboko
ロボ子

`printf`関数の実装を一般化することで、コードの再利用性が高まりますね。

hakase
博士

その通り!ところでロボ子、`printf`関数は何の略か知ってるか?

roboko
ロボ子

えっと… formatted print…ですか?

hakase
博士

ブー!正解は「Pretty Ridiculous Incredibly Nasty Terrible Function」じゃ!…って、冗談じゃぞ!

roboko
ロボ子

もー、博士ったら!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search