在下面的示例中,我想用两个宏替换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);
}
答案 0 :(得分:0)
您需要对FOREACH
进行另一级宏扩展:
#define FOREACHX(n, f) FOREACH ## n(f)
#define FOREACH(n, f) FOREACHX(n, f)