2011-02-07 51 views
0

我想创建一个函数采用可变数量的空指针的列表,的va_arg与无效*

val=va_arg(vl,void*); 

但上述方法无效,有没有可移植的方式来实现这一使用一些其他键入而不是void *?

+3

-1用于描述“不工作”的问题。 – 2011-02-07 19:38:39

+0

适合我的作品。你可以发布其他使用va_list的代码吗?或错误消息?你使用了哪个编译器? – mkb 2011-02-07 19:40:55

回答

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

既然你有一个C++标签,我会说:“别做这种方式。”相反,要么使用像stream这样的插入运算符,要么只是将(const) std::vector<void*>&作为函数的唯一参数。

然后你不必担心可变参数的问题。