C预处理器在for循环中连接

时间:2013-10-13 21:00:35

标签: c macros concatenation c-preprocessor

是否可以在for循环中使用串联?我的代码片段是这样的:

#define CONCATE(a, b) a ## b
#define CALL_SEARCH(n, x, y) search(n, arg1, arg2, x, y)
...
int i;
for (i = 1; i (less than or equal to) number; ++i)
{
    results = CALL_SEARCH(CONCATE(f, i), tol, max_tries);
}

我想在这个for循环中做的是这样的:

搜索(f1,arg1,arg2,tol,max_tries)

搜索(f2,arg1,arg2,tol,max_tries)

...

我知道我的版本显然是错误的,但这是我要归档的结果。

修改

我决定不使用宏。

2 个答案:

答案 0 :(得分:0)

CONCATENATE创建“fi”,而非“f1”。您希望f成为数组并使用i作为索引。

答案 1 :(得分:0)

预处理只是在编译之前完成的文本替换。在这个阶段,我们因此不知道int i的价值。

如果您希望在运行时连接文本字符串“f”和i的值,您可以这样做:

char buf[10];
snprintf(buf, 10, "f%i", i);

然后

CALL_SEARCH(buf, ...)