Ich versuche diese Deklaration von sqlite3.c
zu entschlüsseln %Vor%Es scheint so, als ob es eine Funktion deklariert, weil es anschließend dieses
gibt %Vor%und dann scheinbar Aufrufe der Funktion
%Vor%und
%Vor%Aber ich kann die Erklärung nicht verstehen. Ich habe hervorgehoben, was ich nicht verstehen kann
%Vor%Ich frage mich, warum die Erklärung nicht so ist
%Vor% Ich erwarte, dass es vielleicht eine ähnliche Frage gibt, die bereits gestellt wurde, aber die Suche nach Begriffen wie (
, )
und void
bringt wirklich nichts. Also, wenn das ein Betrogener ist, würde ich mich sehr freuen, dass es als solches geschlossen ist.
Dies deklariert eine Funktion, die einen Funktionszeiger zurückgibt. Der Rückgabetyp ist void (*)(void)
( SQLITE_PRIVATE
wird auf static
erweitert und ist nicht Teil des Rückgabetyps pro Kommentar), aber der Funktionsname (und die Parameter) müssen innerhalb des (*)
-Teils erscheinen.
Funktionen und Arrays sind die zwei C-Typ-Kategorien, die eine Gymnastik zum Parsen erfordern. Sie können sich Array-Typen und Funktionstypen vorstellen, die den von ihnen beschriebenen Bezeichner "dekorieren". Wenn Sie int foo
schreiben, sagen Sie, dass das Symbol "foo" einen Integer-Typ hat. Wenn Sie int foo(double)
schreiben, sagen Sie, dass das Symbol% co_de% einen ganzzahligen Typ hat. foo(double)
und foo
müssen zusammenhalten, also muss jede weitere Dekoration das Ganze so einpacken, als wäre es ein einzelner Name.
Der Punkt wird am besten durch das Mischen von Array-Typen und Funktionstypen veranschaulicht, obwohl der Endtyp in C nicht zulässig ist. (Das sagt viel darüber aus, wie lächerlich die Syntax ist.) Zum Beispiel:
%Vor% wäre ein Array ( (double)
) von Funktionen ( foo[5]
). Auf der anderen Seite:
ist eine Funktion ( int ... (double)
) und gibt ein Array ( foo(double)
) zurück.
Die externe Ressource cdecl.org kann Ihnen helfen, diese Art von Deklaration zu verstehen. Sie müssen jedoch die Strukturnamen durch Standardtypen ersetzen (oder Strukturtypen als int ... [5]
anstatt nur als struct sqlite_vfs
schreiben), damit Ihre Deklaration verstanden wird.
Diese Deklaration
%Vor%ist eine Deklaration einer Funktion mit dem Rückgabetyp, der ein Funktionszeiger vom Typ
ist %Vor%Die Deklaration kann durch die Einführung von typedef vereinfacht werden. Zum Beispiel
%Vor%Hier ist ein Demonstrationsprogramm, das eine ähnliche Funktion verwendet, die einen Zeiger auf eine andere Funktion zurückgibt.
%Vor%Seine Ausgabe ist
%Vor% Zuerst wird die Funktion f
mit typedef und dann ohne typedef
Tags und Links c function declaration function-declaration