[英]how to call particular function using #define macro?
我想根据传递给宏的值调用特定的函数。 但这给了我编译错误
#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);
}
}
记住在索引之前检查边界条件!
您可以使用数组存储函数,并修改宏:
#include <stdio.h>
#define calling(m, j) exec_funcs[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);
}
void (*exec_funcs[3])(int) = { execcall0, execcall1, execcall2 };
int main () {
int i = 0;
for (i = 0; i < 3; i++) {
calling(i, 1);
}
}
但是然后,您实际上并不需要宏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.