Nie wiem, jak to osiągnąć!
jak uzyskać wskaźnik funkcji w argumentach va_list?
wielkie dzięki.Jak przekazać wskaźnik funkcji do funkcji ze zmiennymi argumentami?
5
A
Odpowiedz
4
Użyj typedef dla typu wskaźnika funkcji.
3
Typedefs często ułatwiają pracę z wskaźnikami funkcyjnymi, ale nie są konieczne.
#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);
}
Generalnie, aby stworzyć nazwę typu (do użytku z '' sizeof' va_arg', A typecast lub podobnym), napisać deklarację zmiennej z tego typu, a następnie usunąć nazwę zmiennej. – caf
W rzeczywistości jest to (ironicznie), że tylko czas, że są wymagane typedefs. Mówiąc o parametrze * type * dla va_arg w sekcji 7.15.1.1 normy C: "Typ parametru musi być nazwą typu określoną tak, że typ wskaźnika do obiektu, który ma określony typ, można uzyskać po prostu przez a * do typu. " Oznacza to, że wiele nietrywialnych typów nie może działać, w tym twój przykład, bez typedef. –
Nie kompiluje się na moim zestawie narzędzi. – KeatsPeeks