0

我需要使用宏连接字符串以生成函数名称。

#define CONCAT(a,b,c) a ## b

int i=1;
CONCAT(a,i)

结果,此代码给出ai了,而我想要的是a1.

由于我的源代码中有很多函数,我不想列举它们。

我的目标:

for(int i=0;i<100;i++)
{
    Funi1();//here i should be from  0 to one hundred 
    Funi2();
    Funi3();
    Funi4();
    ..
}

@土豆瓦特

我写了一个脚本来扩展它,输出文件花费了几百行。@埃里克·芬恩

4

4 回答 4

8

这是不可能的,因为宏在预处理阶段被扩展。所以,它不能取一个变量的值和concat。

于 2013-06-07T12:47:47.110 回答
0

尝试使用LINE宏,它会给你数字 :) 如果你不关心 1+1+1+1 像 static int FUNCAD(once, LINE )=1;if(FUNCAD(once, LINE )>0)

如果那对你有用

于 2013-12-28T00:09:49.417 回答
0

您可以使用以下命令预编译它: gcc -E sourcecode.c 并观看它,它只是替换变量名,而不是获取值和计算,所以不可能让它像你想要的那样工作。

于 2013-06-07T15:26:16.457 回答
0

预定义的宏呢__COUNTER__,你在 GCC 和 VC 上都有。它对你有帮助吗?

#include <stdio.h>
#define FUNC2(x,y) x##y
#define FUNC1(x,y) FUNC2(x,y)
#define FUNC(x) FUNC1(x,__COUNTER__)

int FUNC(my_unique_prefix);
int FUNC(my_unique_prefix);

int main() {
   my_unique_prefix0 = 0;
   printf_s("\n%d",my_unique_prefix0);
   my_unique_prefix0++;
   printf_s("\n%d",my_unique_prefix0);
}

来自这里的示例

于 2013-06-07T13:48:41.283 回答