web-dev-qa-db-ja.com

Cのprintf関数のコード

可能性のある複製:
c/c ++関数のソースコード

Printf( "Hello World!");を記述するときに使用されるCコードをどこで見つけることができるのか疑問に思っていました。私のCプログラムでは、その文字列をSTDOUTに出力する必要があることを知っています。 <stdio.h>を調べましたが、プロトタイプint printf(const char * format、...)しか見つかりませんでしたが、内部的にはそのようには見えませんでした。

53
Rainer Zufall

以下はGNU printfのバージョンです... stdoutvfprintfに渡すことがわかります。

__printf (const char *format, ...)
{
   va_list arg;
   int done;

   va_start (arg, format);
   done = vfprintf (stdout, format, arg);
   va_end (arg);

   return done;
}

こちらをご覧ください

リンク to vfprintf...すべての「魔法」のフォーマットはここで行われます。

これらの関数について真に「異なる」唯一のものは、可変長引数リストの引数を取得するために可変引数を使用することです。それ以外は、従来のCにすぎません(これは、コンパイラで特定のサポートを使用して実装されるPascalのprintfとは対照的です...少なくとも当時はそうでした。)

76
mschaef