2009-10-20 26 views

risposta

4

Utilizzare un typedef per il tipo di puntatore della funzione.

3

I typedef spesso facilitano il lavoro con i puntatori di funzione, ma non sono necessari.

#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

In generale, per creare un nome di tipo (per uso con 'va_arg',' sizeof', un typecast o simile), scrivere un dichiarazione di una variabile con tale tipo, quindi rimuovere il nome della variabile. – caf

+2

In realtà, questo è (per ironia della sorte) solo quando è necessario il typedef. Parlando del parametro * type * per va_arg nella sezione 7.15.1.1 dello standard C: "Il tipo di parametro deve essere un nome di tipo specificato in modo tale che il tipo di puntatore a un oggetto che ha il tipo specificato possa essere ottenuto semplicemente tramite postfixing un * per digitare. " Ciò significa che molti tipi non banali non sono garantiti per funzionare, incluso il tuo esempio, senza typedef. –

+0

Non si compila sul mio set di strumenti. – KeatsPeeks

Problemi correlati