带有void *列表的va_arg

时间:2011-02-07 19:34:55

标签: c++ c pointers

我想创建一个带有可变数量的void指针的函数,

val=va_arg(vl,void*);

但是上面不起作用,是否有可行的方法来实现这个使用其他类型而不是void *?

2 个答案:

答案 0 :(得分:4)

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

void
myfunc(void *ptr, ...)
{
    va_list va;
    void *p;

    va_start(va, ptr);
    for (p = ptr; p != NULL; p = va_arg(va, void *)) {
        printf("%p\n", p);
    }
    va_end(va);
}

int
main() {
    myfunc(main,
           myfunc,
           printf,
           NULL);
    return 0;
}

我正在使用Fedora 14 ..

答案 1 :(得分:1)

由于你有一个C ++标签,我会说“不要这样做”。相反,要么像流一样使用插入运算符,要么只传递(const) std::vector<void*>&作为函数的唯一参数。

然后你不必担心varargs的问题。