2009-10-20 27 views

Respuesta

4

Usar un typedef para el tipo de puntero de función.

3

typedefs menudo hacen que trabajar con punteros a funciones más fáciles, pero no son necesarios.

#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

En general, para crear un nombre de tipo (para su uso con 'va_arg',' sizeof', un encasillado o similar), escribir una declaración de una variable de ese tipo, a continuación, quitar el nombre de la variable. – caf

+2

En realidad, esto es (irónicamente) el único momento en que se requieren typedefs. Hablando del parámetro * type * para va_arg en la sección 7.15.1.1 del estándar C: "El tipo de parámetro debe ser un nombre de tipo especificado tal que el tipo de un puntero a un objeto que tiene el tipo especificado puede obtenerse simplemente por postfijación a * para escribir ". Esto significa que muchos tipos no triviales no están garantizados para funcionar, incluido su ejemplo, sin un typedef. –

+0

No se compila en mi conjunto de herramientas. – KeatsPeeks

Cuestiones relacionadas