按值转换宏,然后将其作为参数传递给另一个宏

时间:2019-07-25 15:14:06

标签: c macros c-preprocessor

在下面的示例中,我想用两个宏替换FOREACH(2,CREATE)中的2。我怎么做?当前,如果我输入FOREACH(TWO,CREATE),它将以TWO作为字符串,而不是将其转换为2。

#define FOREACH1(f) f(0)
#define FOREACH2(f) f(1) FOREACH1(f)
#define FOREACH(n, f) FOREACH ## n(f)
#define TWO 2
#define CREATE(a) int c ## a;
FOREACH(2, CREATE);

int main(int argc, char*argv[]) {
    c0 = 1;
    printf("sum = %d\n", c0);
}

1 个答案:

答案 0 :(得分:0)

您需要对FOREACH进行另一级宏扩展:

#define FOREACHX(n, f) FOREACH ## n(f)
#define FOREACH(n, f) FOREACHX(n, f)