C++(2)

#include

に疑問・・・
stdio.hの中身を見てみます。
ふむふむ、

_CRTIMP int __cdecl printf(const char *, ...);

という一行を発見。
これがprintfの宣言部分か・・・
で、「_CRTIMP」「__cdecl」ってナニ?

stdio.hを検索すると、

/* Define _CRTIMP */

#ifndef _CRTIMP
#ifdef _DLL
#define _CRTIMP __declspec(dllimport)
#else /* ndef _DLL */
#define _CRTIMP
#endif /* _DLL */
#endif /* _CRTIMP */

という部分が。
・・・要するに_「CRTIMP = __declspec(dllimport)」ですな。(超訳
ぐぐってみたところhttp://hp.vector.co.jp/authors/VA023539/tips/dll/006.htmに__declspec(dllimport)の解説的記事が。
ようするにdllにありますよーってこと、かなぁ?(自信なし
つまりprintfでなにをするかはdllまかせなわけだ。ほほう。

次に「__cdecl」をぐぐり倒した結果、
http://www.python.jp/pub/doc_jp/contrib/ctypes/tutorial_jp.html
に辿り着いた。pythonのページというのがアレだが(^^;)「標準の cdecl 呼び出し規約」という一文があるのできっと「cdecl=呼び出し規約の一種」ということだろう。
ほかにも「'stdcall' 呼び出し規約」があるらしいが・・・

で、呼び出し規約。http://blues.se.uec.ac.jp/swtest/jasst05/S5-B-2.pdfに書いてあったのは・・・

・cdecl
WindowsAPIではこれが一般的。
呼び出し元でスタックを調整する方式。
・stdcall
呼び出された関数側でスタックを調整する方式。
・fastcall
引数をスタックに積まず、レジスタ渡しする方式

ふむ、windowsAPIの呼び出しかたか・・・
要するに、「標準C関数とかはmsvcrt.dllにあるから!俺は知らん!知らん!」ってことですかね。はふぅ。