重複の可能性:
c/c++ 関数のソース コード
printf("Hello World!"); と書くときに使用される C コードはどこにあるのだろうと思っていました。私のCプログラムでは、その文字列をSTDOUTに出力する必要があることを知っています。<stdio.h> を調べたところ、そのプロトタイプ int printf(const char *format, ...) しか見つかりませんでしたが、内部的にどのように見えるかはわかりませんでした。
重複の可能性:
c/c++ 関数のソース コード
printf("Hello World!"); と書くときに使用される C コードはどこにあるのだろうと思っていました。私のCプログラムでは、その文字列をSTDOUTに出力する必要があることを知っています。<stdio.h> を調べたところ、そのプロトタイプ int printf(const char *format, ...) しか見つかりませんでしたが、内部的にどのように見えるかはわかりませんでした。
printf
これが ...の GNU バージョン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;
}
ここにリンクがvfprintf
あります...すべてのフォーマットの「魔法」はここで起こります。
これらの関数について真に「異なる」唯一の点は、可変長引数リスト内の引数を取得するために varargs を使用することです。それ以外は、従来の C にすぎません (これはprintf
、コンパイラで特定のサポートを使用して実装されている Pascal の同等のものとは対照的です... 少なくとも当時はそうでした)。