gpt4 book ai didi

c - 如何使用#define宏调用特定函数?

转载 作者:行者123 更新时间:2023-12-01 16:26:24 25 4
gpt4 key购买 nike

我想根据传递给宏的值调用特定函数。但它给了我编译错误

#include <stdio.h>

#define calling(m, j) execcall ## m(j);

void execcall0 (int x) {
printf("called 0 with arg %d\n", x);
}

void execcall1 (int x) {
printf("called 1 with arg %d\n", x);
}

void execcall2 (int x) {
printf("called 2 with arg %d\n", x);
}

int main () {
int i = 0;
for (i = 0; i < 3; i++) {
calling(i, 1);
}
}

编译错误:

In function `main':
new.c:(.text+0x7a): undefined reference to `execcalli'
collect2: ld returned 1 exit status

我正在尝试的事情有可能吗?

最佳答案

如果您想根据整数值调用函数,最好编写一个指向函数的指针数组,并使用整数对数组进行索引。

void execcall0(int x); 
void execcall1(int x);
void execcall2(int x);

/* Array of pointers to void functions taking an int parameter. */
void (*apfn[])(int) =
{
execcall0,
execcall1,
execcall2,
};

int main()
{
int i;
for (i = 0; i < 3; ++i) {
(apfn[i])(1);
}
}

记住在索引之前检查边界条件!

关于c - 如何使用#define宏调用特定函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com