扩展变量名中的宏值

gsf*_*gsf 5 c c-preprocessor

我有

#define MACRO foo

#define Code(m) \
    m##Bar

Code(MACRO)
Run Code Online (Sandbox Code Playgroud)

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

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

Grz*_*ski 4

您需要的是类似辅助函数的宏,它将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;
}
Run Code Online (Sandbox Code Playgroud)

正如下面的评论所指出的,您需要它,因为受运算符影响的宏参数##不会被评估为其值(即替换)。上面的代码是解决此类问题的常见方法。