#define文等について質問です
表題の件ですが、
プログラム読んでいて分からないことありましたので、
C言語の文法的なことですが、教えて下さいませ。
全然自信ないですが、自分の解釈も付けてみました…
質問(1)
#define MP_RELEASEWIN(p) MP_FreeWin((IWindow **)&(p))
中略
static void MP_FreeWin(IWindow ** ppif);
中略
static void MP_FreeWin(IWindow ** ppif)
{
中略
}
このような場合、最初の#defineは、
MP_RELEASEWIN(p)は、MP_FreeWin((IWindow **)&(p))だよ
と定義しているけど、前方宣言にはなっていないから
static voidでプロトタイプ宣言して、
最後に関数の定義を書いているって解釈で
合っているのでしょうか?
質問(2)
#define MP_IWINDOW_SETVTBL(pVtbl, pfnEn, pfnRd, pfnHE, pfnDel) \
(pVtbl)->Enable = (pfnEn); \
(pVtbl)->Redraw = (pfnRd); \
(pVtbl)->HandleEvent = (pfnHE); \
(pVtbl)->Delete = (pfnDel)
これって、
MP_IWINDOW_SETVTBL(pVtbl, pfnEn, pfnRd, pfnHE, pfnDel)
を
(pVtbl)->Enable = (pfnEn); \
(pVtbl)->Redraw = (pfnRd); \
(pVtbl)->HandleEvent = (pfnHE); \
(pVtbl)->Delete = (pfnDel)
の4行部分で置き換えているのでしょうか?
あと、(pfnDel)の最後だけ、「;」がないのは
約束事って理解でいいのでしょうか?
質問(3)
#define CMediaPlayer_CancelRedraw(p) { CALLBACK_Cancel(&(p)->m_cbRedraw); (p)->m_bRedraw = FALSE; }
こんなのがあるのですが、
これは質問(2)と同じ意味なのでしょうか?
こっちにはカッコが付いているのですが、
これは、何か意味があるのでしょうか?
質問(4)
QINTERFACE(IWindow)
{
// Releases the window resources
void (*Delete)(IWindow * po);
};
この
void (*Delete)(IWindow * po);
の部分は、どういう風に理解すればいいのでしょうか?
カッコとか、*がついてますが…
Delete(IWindow * po);
とかいう関数に何かしているという意味なのでしょうか@@;
教えて下さい。
なんか、たくさん質問してますが、
よろしくお願い致しますm(__)m
お礼
回答ありがとうございます。 >#defineの処理よりコメントの処理が先に実行される なるほど、理解できました。