Ich versuche herauszufinden, was der folgende Code in C tut?
%Vor% wobei 'buf' ein char
-Array ist.
Gehen wir Schritt für Schritt vor.
%Vor%Dies ist ein Zeiger auf eine Funktion, die unspezifizierte Argumente entgegennimmt und keinen Rückgabewert hat.
%Vor%gibt einfach einen Puffertyp für diesen Funktionszeiger aus. Endlich,
%Vor%ruft diese Funktion auf.
Die gesamte Anweisung lautet also "interpretiere buf
als Zeiger auf eine void
-Funktion ohne Argumente und rufe diese Funktion auf."
Er wandelt buf
in einen Funktionszeiger des Typs void(*)()
(eine Funktion, die nichts / void zurückgibt und unspezifizierte Argumente annimmt) um und ruft sie auf.
Der ANSI-Standard erlaubt nicht das Umwandeln von normalen Datenzeigern in Funktionszeiger, aber Ihre Plattform erlaubt dies möglicherweise.
Ich neige dazu, den Befehl "cdecl" zu verwenden, wenn ich auf eine verblüffende Erklärung stoße. Beispiel:
%Vor%Obwohl es Fälle gibt, in denen ich mir wünsche, dass es ein Tool gibt, das die Ausgabe von "cdecl" erklärt: /
Dies setzt buf
auf den Typ void (*)()
, einen Zeiger auf eine Funktion, die nicht spezifizierte Parameter akzeptiert und nichts zurückgibt. Dann ruft es die Funktion an dieser Adresse auf (die beiden rechten Klammern).
Es wandelt buf
in einen Funktionszeiger um, der unspezifizierte Argumente entgegennimmt und aufruft.
Sie können "Experten-c-Programmierung" eine gute Lektüre finden - Entpacken dieser Art von Dingen ist in einem der Kapitel, wenn ich mich recht erinnere. Es ist lange her, seit ich es gelesen habe, aber ich erinnere mich, dass es zu der Zeit die Mühe wert war. Ссылка
Es gibt eine Online-Version des Tools "cdecl", das von lsc erwähnt wurde und das Sie möglicherweise nützlich finden könnten: Ссылка