C语言中宏的使用

Usage of macro in C language

本文关键字:语言      更新时间:2023-10-16

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

#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历险记》

这是不可能的,因为宏是在预处理阶段展开的。因此,它不能取一个变量的值并连接。

关于__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);
}

从这里的例子

您可以使用:gcc -E sourccode .c预编译它并观察它,它只是替换变量名,而不是获取值和计算,因此不可能让它像您想要的那样工作

试试LINE宏,它会给你数字:)如果你不关心1+1+1+1就像静态int FUNCADD(一次,) = 1;如果(FUNCADD(一次,)> 0)