如何将函数指针传递给具有可变参数的函数?

6

我不知道如何实现这个!
如何在va_list参数中获取函数指针?
非常感谢。

2个回答

5

typedef通常使得与函数指针的操作更加容易,但并不是必须的。

#include <stdarg.h>
void foo(int count, ...) {
    va_list ap;
    int i;
    va_start(ap, count);
    for (i = 0; i < count; i++) {
        void (*bar)() = va_arg(ap, void (*)());
        (*bar)();
    }
    va_end(ap);
}

2
通常,要创建一个类型名称(用于 va_argsizeof、类型转换或类似操作),请编写具有该类型的变量声明,然后删除变量名称。 - caf
2
实际上,这是(具有讽刺意味的)typedef 所需的唯一时间。关于 C 标准第 7.15.1.1 节中 va_arg 的 type 参数:“参数类型应指定为类型名称,以便通过在类型后缀处添加 * 来获取具有指定类型的对象的指针类型。” 这意味着许多非平凡类型不能保证工作,包括您的示例,除非使用 typedef。 - Robert Gamble
我的工具集上编译不通过。 - KeatsPeeks
是的,在我写完这篇文章几个小时后,我想到了它是否合法,然后“好吧,它可以使用GCC…”。无论如何,caf的评论都是有用的,不管这个特定的答案如何。 - ephemient
除了从我给出的例子中删除va_arg之外。 - caf

4

为函数指针类型使用typedef。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接