Komplizierte C-Cast-Erklärung

8

Ich versuche herauszufinden, was der folgende Code in C tut?

%Vor%

wobei 'buf' ein char -Array ist.

    
Tony The Lion 11.11.2009, 14:33
quelle

10 Antworten

21

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."

    
Thomas 11.11.2009, 14:37
quelle
9

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.

    
Wernsey 11.11.2009 14:36
quelle
5

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: /

    
Shawn Chin 11.11.2009 14:57
quelle
4

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).

    
Nick Meyer 11.11.2009 14:37
quelle
2
%Vor%     
pmg 11.11.2009 14:41
quelle
2

Es wandelt buf in einen Funktionszeiger um, der unspezifizierte Argumente entgegennimmt und aufruft.

    
Nick Dandoulakis 11.11.2009 14:36
quelle
1

Ich würde vermuten, dass es in vielen Fällen die Maschine abstürzt. Andernfalls behandelt es das Array als Zeiger auf eine Funktion, die void zurückgibt und sie aufruft.

    
plinth 11.11.2009 14:36
quelle
1

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. Ссылка

    
andrew cooke 11.11.2009 14:53
quelle
1

Es gibt eine Online-Version des Tools "cdecl", das von lsc erwähnt wurde und das Sie möglicherweise nützlich finden könnten: Ссылка

    
madman1969 13.11.2009 10:45
quelle
0

ruft einen Funktionszeiger auf. Die Funktion hat keine Argumente.

Funktionszeiger - Wikipedia

    
segy 11.11.2009 14:37
quelle

Tags und Links