__mingw_vprintf
これは主に、実際の作業を行う別の関数のラッパーです。ここでの唯一のコードは、可変引数リストを再パッケージ化することです。したがって、Mingw がどのようにそれを行うかを実際に確認するには、その関数とそれが呼び出す他の関数を調べる必要があります。これに本当に興味がある場合は、PJ Plauger のThe Standard C Libraryのコピーを入手してください。彼は、標準ライブラリのすべての関数を使用、作成、およびテストする方法を説明します。
一般に、ライブラリ コードはオブジェクト ファイルにコンパイルされ (コードと同様)、アーカイブ形式でパッケージ化されます。プログラムがリンクされると、必要なライブラリ オブジェクトがアーカイブから抽出され、同じ実行可能ファイルに書き込まれます。これは、静的にリンクされたライブラリ用です。
動的にリンクされたライブラリの場合、ライブラリ コード アーカイブは全体としてメモリにロードされ (通常、それを使用する必要があるプログラムによって共有されます)、プログラムはオペレーティング システムの助けを借りてライブラリ呼び出しを行い、メモリを容易にします。 -共有。
どちらの種類のライブラリでも、ヘッダー ファイルにはマクロ、型、および関数プロトタイプのみを含める必要があります。関数定義を含めないでください (ファイルに属し.c
ます)。
printf
これは、標準ライブラリが存在する前の古いバージョンです: link (<-- これは実際に読み取り可能です (ish))。不思議なことに、第 7 版のバージョンは、上で引用したものとよく似ています。
#include <stdio.h>
printf(fmt, args)
char *fmt;
{
_doprnt(fmt, &args, stdout);
return(ferror(stdout)? EOF: 0);
}
この場合、_doprnt
アセンブリ言語で実装されます。