在C/C++中#可以将宏的变量名称转换成字符串
例如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;
}
}