展开变量名称中的宏值

时间:2015-02-01 19:48:38

标签: c c-preprocessor

我有

#define MACRO foo

#define Code(m) \
    m##Bar

Code(MACRO)

我希望将其解析为fooBar,但它会被解析为MACROBar。

我需要更改要通过其值而不是其名称来解析的宏。

1 个答案:

答案 0 :(得分:2)

您需要的是类似辅助功能的宏,它将m预处理令牌扩展为foo

#include <stdio.h>

#define MACRO foo

#define CodeReal(m) \
    m##Bar

#define Code(m) CodeReal(m)

int main(void)
{
    int Code(MACRO) = 0;

    printf("%d\n", fooBar);

    return 0;
}

正如comment below所指出的那样,你需要它,因为受##运算符约束的宏参数不会被计算为它们的值(即替换)。上面的代码是解决此类问题的常见方法。