#のマクロ定義での役割
725 ワード
C/C++で#マクロの変数名を文字列に変換
例えばMFCソースでは
この方法により,列挙,定数,マクロ名の文字列出力リストを容易に形成できる.次のコードで値を文字列に変換できます.
例えばMFCソースでは
struct AFX_MAP_MESSAGE
{
UINT nMsg;
LPCSTR lpszMsg;
};
#define DEFINE_MESSAGE(wm) { wm, #wm }
static const AFX_MAP_MESSAGE allMessages[] =
{
DEFINE_MESSAGE(WM_CREATE),
DEFINE_MESSAGE(WM_DESTROY),
DEFINE_MESSAGE(WM_MOVE),
//
DEFINE_MESSAGE(WM_DEVICECHANGE),
{ 0, NULL, } // end of message list
};
#undef DEFINE_MESSAGE
この方法により,列挙,定数,マクロ名の文字列出力リストを容易に形成できる.次のコードで値を文字列に変換できます.
UINT nMsg = WM_CREATE;
LPCSTR lpszMsgName = NULL;
const AFX_MAP_MESSAGE* pMapMsg = allMessages;
for (/*null*/; pMapMsg->lpszMsg != NULL; pMapMsg++)
{
if (pMapMsg->nMsg == nMsg)
{
lpszMsgName = pMapMsg->lpszMsg;
break;
}
}