va_arg со списком пустот * - PullRequest
0 голосов
/ 07 февраля 2011

Я хотел бы создать функцию, которая принимает переменное число пустых указателей,

val=va_arg(vl,void*);

, но выше не работает, есть ли переносимый способ добиться этого, используя какой-то другой тип вместо void *

Ответы [ 2 ]

4 голосов
/ 07 февраля 2011
#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 голос
/ 07 февраля 2011

Поскольку у вас есть тег C ++, я скажу «не делайте так». Вместо этого, либо используйте операторы вставки, как это делают потоки, ИЛИ просто передайте (const) std::vector<void*>& в качестве единственного параметра вашей функции.

Тогда вам не нужно беспокоиться о проблемах с varargs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...