可能性のある複製:
c/c ++関数のソースコード
Printf( "Hello World!");を記述するときに使用されるCコードをどこで見つけることができるのか疑問に思っていました。私のCプログラムでは、その文字列をSTDOUTに出力する必要があることを知っています。 <stdio.h>を調べましたが、プロトタイプint printf(const char * format、...)しか見つかりませんでしたが、内部的にはそのようには見えませんでした。
以下はGNU printf
のバージョンです... stdout
をvfprintf
に渡すことがわかります。
__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
とは対照的です...少なくとも当時はそうでした。)