在C语言中使用宏

时间:2013-06-07 12:44:21

标签: c++ c macros

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

#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();
    ..
}

@Potatoswatter

我编写了一个脚本来扩展它,输出文件花费了一百行。 @Eric Finn

4 个答案:

答案 0 :(得分:8)

由于宏在预处理阶段被扩展,因此无法实现。 所以,它不能取变量和concat的值。

答案 1 :(得分: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);
}

来自here

的示例

答案 2 :(得分:0)

你可以用gcc -E sourcecode.c预先编译它并观察它,它只是替换变量名,而不是得到值并且完全计算,所以不可能让它像你想要的那样工作。

答案 3 :(得分:0)

尝试使用 LINE 宏,它会给你数字:)如果你不关心1 + 1 + 1 + 1 喜欢 static int FUNCADD(一次, LINE )= 1; if(FUNCADD(一次, LINE )&gt; 0)

如果那是你的问题