#99 Article 793 Posted at 1993/11/03 00:49:18 by るなお (MAP3764) [C]

Subject: Re: printfは奥がふかい /791

>Cのprintfってよく使いますが,
>これってとてつもなくスゴイ関数ですよね.

 はい。スゴイです。何しろ可変個の引数とりますし。


>これって内部で出力用バッファをmallocしてるんでしょうか?
>それとも1文字ごとにputcharしてるんでしょうか?

 どちらでもありませんね。まず、メモリの確保は固定サイズで 
auto で取られている作業用(数値などを文字列に変換するため)の
バッファと、ストリームをオープンした時に割り当てた I/O 用の
バッファを使います。そして、putc マクロ(関数ではない)を使っ
て I/O バッファに書き込んでいます。


>こんどデバッガでprintfをのぞいてみようかな?


  私は、会社で 4.3BSD と SVR2.0, SVR4.0, SVR4.2 の libc.a の
ソースを見る事が出来ますが (ソースライセンス受けてるから)。
比べてみた事は無いですが、GNU の libc.a でもそう変わらないで
しょうから、 GNU のソースを一度みてみるといいかもしれません。
多分逆アセンブラで解析するのは死ぬと思います (^^; 。ソース見
ても結構複雑ですから。


----------
るなお