有办法通过一个值来获得其宏吗?解决办法

有办法通过一个值来获得其宏吗?
如题

例如
#define XXX 100

有没有办法通过100得到XXX?

而且是通过宏的方式,因为这些是一系列资源ID,而类名的命名规则是在资源ID前加"C"

#define IDToClass(_X) C##_X 可以通过XXX来合成类的名字

new IDToClass(XXX) 即可得到一个XXX的对象,问题是怎么能得到XXX ?在函数的参数里怎么能保留这些信息?或者怎么能通过宏的值逆推回宏?

------解决方案--------------------
宏在编译之前已经替换掉了
------解决方案--------------------
无法逆向操作,编译器也做不到。
假设你定义 XXX 为100,也定义YYY为100,你现在给定100,结果到底是XXX还是YYY呢?
------解决方案--------------------
你想要ID名和ID值关联起来,可以这样:
C/C++ code

enum MY_DEFINE
{
  ID_1 = 0,
  ID_2,
  ...
  ID_NUM
}

const char NAME[ID_NUM] = {...};  // 名字
const long VALUE[ID_NUM] = {...}; // 值

------解决方案--------------------
没有可逆性
#define XXX 100
#define YYY 100
如果可以的话,那么该得出XXX还是YYY呢?
------解决方案--------------------
..才看到上面有人举过了..而且如此相似..
------解决方案--------------------
C/C++ code

#define MAKE_MACS_DATA(_X)    {_X, #_X}

typedef struct _MAC_STRING 
{
    DWORD            dwValue;
    CHAR            szMacString[1024];
}MAC_STRING;

BOOL    NMac::GetMacString_Error(int nError, _bstr_t *pbStrMac)
{
    int                        i;
    int                        nCount;
    static    MAC_STRING        table[] = 
    {
        MAKE_MACS_DATA(ERROR_SUCCESS), 
        MAKE_MACS_DATA(ERROR_INVALID_FUNCTION), 
        MAKE_MACS_DATA(ERROR_FILE_NOT_FOUND), 
        ...
        MAKE_MACS_DATA(ERROR_AUDITING_DISABLED), 
        MAKE_MACS_DATA(ERROR_ALL_SIDS_FILTERED)    
    };

    nCount = sizeof(table) / sizeof(MAC_STRING);

    for(i=0; i<nCount; i++)
    {
        if(nError == table[i].dwValue)
        {
            *pbStrMac = table[i].szMacString;
            return TRUE;
        }
    }
    
    *pbStrMac = "";
    return FALSE;

}