2009-10-20 6 views

Odpowiedz

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); 
} 
+2

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

+2

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. –

+0

Nie kompiluje się na moim zestawie narzędzi. – KeatsPeeks