我有一组预定义的宏(我不能更改),每个宏都将数组的索引作为输入。我想要创建另一个宏,以便能够通过将标记粘贴在一起来选择要使用的先前定义的宏。
我尝试创建一个带有2个参数的宏:x
选择要使用的先前定义的宏,以及ind
传递给所选宏。
下面的代码使用
https://www.onlinegdb.com/online_c_compiler
因此,在将其放入相当大的应用程序之前,我可以弄清楚基本代码。
#include <stdio.h>
//struct creation
struct mystruct {
int x;
int y;
};
//create array of structs
struct mystruct sArr1[2] = {{1,2},{3,4}};
struct mystruct sArr2[2] = {{5,6},{7,8}};
//define macros
#define MAC1(ind) (sArr1[ind].x)
#define MAC2(ind) (sArr2[ind].y)
// Cannot change anything above this //
//my attempt at 2 input macro
#define MYARR(x,ind) MAC ## x ## (ind)
int main() {
printf("%d\n", MYARR(1, 0));
return 0;
}
我希望结果打印出索引为
x
的sArr1
的0
值。相反,我得到这个输出main.c:在“ main”函数中:
main.c:29:22:错误:粘贴“ MAC1”和“(”没有给出有效的预处理令牌
#定义MYARR(x,ind)MAC ## x ##(ind)
^
main.c:33:19:注意:扩展宏“ MYARR”
printf(“%d \ n”,MYARR(1,0));
最佳答案
第29行应为:
#define MYARR(x,ind) MAC##x(ind)
我测试了它打印了“ 1”,这是您想要的。
关于c - 如何通过将 token 粘贴在一起来创建类似函数的宏 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57224636/