67

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

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

4

1 に答える 1

95

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 の同等のものとは対照的です... 少なくとも当時はそうでした)。

于 2011-02-01T19:52:30.417 に答える