Hier ist, wie Sinn komplizierter typedefs zu machen: Erstens Blick auf der Linie mit typedef
entnommen:
int16_t NEW_TYPE (* product_init_t)(product_descript_t *const description);
Dann herausfinden, was diese Linie würde erklären: es ist eine Variable product_init_t
mit einer bestimmten Art genannt.
Schließlich typedef
hinzufügen bedeutet, dass es product_init_t
zu einem Alias für diesen bestimmten Typ anstelle einer Variablen dieses Typs erklärt.
Um die obige Erklärung zu erarbeiten, Sie cdecl
verwenden können, oder Sie können in von außen unter Verwendung der Kenntnis der möglichen Deklaratoren (Zeiger, ein Array-Funktion) aus dem Angriff zu nehmen.
In diesem Fall ist das äußerste Feature die Parameterliste auf der rechten Seite, also vermuten wir, dass dies ein Funktionsdeklarator sein könnte. Funktionsdeklaratoren aussehen (grob):
returntype function_name (parameters_opt)
obwohl bedenken Sie, dass eine gemeinsame Compiler-Erweiterung ist zu additonal Eigenschaften der Funktion über __declspec
oder auf andere Weise, an der gleichen Stelle wie der Rückgabetyp angeben; oder es könnte extern "C"
dort sein, und so weiter.
Bis jetzt sind wir in der Phase, (*product_init_t)
ist eine Funktion mit int16_t NEW_TYPE
als Rückgabetyp (und mögliche declspecs) und Parameterliste (product_descript_t *const description)
.
Schließlich ist * product_init_t
nur ein Zeiger Deklarator, so dass wir schließen, dass product_init_t
ein Zeiger auf eine Funktion des obigen Typs ist.
Ihre Kommentare weisen darauf hin, unsicher über NEW_TYPE
. Es wird etwas sein, das bereits früher definiert wurde (oder ein Compiler-Erweiterungsschlüsselwort); vielleicht würde die Vorverarbeitung des Codes mit gcc -E
helfen, wenn Ihre IDE ihre Definition nicht finden kann.
Es deklariert einen Alias des Funktionszeiger-Typs. Siehe http://stackoverflow.com/questions/4295432/typedef-function-pointer. – kennytm
Ich würde lieber sagen 'typedef int16_t (* stuff) (Zeug) NEW_TYPE;' – ForceBru
Was ist 'NEW_TYPE'? ist das ein '# define'? –