2009-10-20 4 views

Antwort

4

Verwenden Sie einen Typdef für den Funktionszeigertyp.

3

Typedefs erleichtern oft das Arbeiten mit Funktionszeigern, sind aber nicht notwendig.

#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

Im Allgemeinen einen Typnamen (zur Verwendung mit 'va_arg',' sizeof', einer Typumwandlung oder ähnlichem), schreiben Sie eine Deklaration einer Variablen mit dieser Art zu erstellen, dann die Variablennamen entfernen. – caf

+2

Eigentlich ist das (ironisch) nur die Zeit, die Typedefs benötigt werden. Was den Parameter * type * für va_arg in Abschnitt 7.15.1.1 des C-Standards betrifft: "Der Parametertyp muss ein Typenname sein, der so spezifiziert ist, dass der Typ eines Zeigers auf ein Objekt mit dem angegebenen Typ einfach durch Postfixing erhalten werden kann a * zu tippen. " Dies bedeutet, dass viele nicht-triviale Typen nicht garantiert funktionieren, einschließlich Ihres Beispiels ohne typedef. –

+0

Kompiliert nicht auf meinem Toolset. – KeatsPeeks

Verwandte Themen