Ich habe kürzlich beim Spielen mit GNU Bison ein paar Funktionsdefinitionen wie diese gesehen:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
Warum ist die Art von self
außerhalb der Klammer? Ist das gültiges C?
Ich habe kürzlich beim Spielen mit GNU Bison ein paar Funktionsdefinitionen wie diese gesehen:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
Warum ist die Art von self
außerhalb der Klammer? Ist das gültiges C?
etw
Dies sind Funktionsparameterdeklarationen im alten K&R-Stil, die die Typen der Parameter separat deklarieren:
int func(a, b, c)
int a;
int b;
int c;
{
return a + b + c;
}
Dies ist dasselbe wie die modernere Art, Funktionsparameter zu deklarieren:
int func(int a, int b, int c)
{
return a + b + c;
}
Die Deklarationen des “neuen Stils” werden grundsätzlich allgemein bevorzugt.
Wenn Sie die Typdefinition für einen Parameter weglassen, wird davon ausgegangen, dass dieser Parameter int ist. Wenn Sie den Rückgabetyp weglassen, wird davon ausgegangen, dass er int ist. zB: func(a,b,c) { return a+b+c; }
– Ferruccio
10. Juni 2010 um 16:23 Uhr
Nur FWIW, K&R-Stil wird immer noch manchmal für Code-Golf verwendet …
– Jerry Sarg
10. Juni 2010 um 16:29 Uhr
Dies ist die sogenannte “alte” Variante der Deklaration von Funktionsargumenten. Früher konnte man Argumenttypen nicht einfach in die Klammern schreiben, sondern musste sie für jedes Argument direkt nach der schließenden Klammer definieren.
Mit anderen Worten, es ist äquivalent zu ripper_pos( VALUE self )
Ja, es verwendet einen älteren Stil der Funktionsdefinition, bei dem die Parameter ohne Typ in Klammern aufgeführt sind, gefolgt von der Deklaration dieser Variablen mit ihre Typen vor der öffnenden geschweiften Klammer des Funktionskörpers. So self
ist vom Typ VALUE
.
Das ist alt c. K&R C verwendete diese Konvention, bevor ANSI C typisierte Parameter erzwang.
static VALUE // A static function that returns 'VALUE' type.
ripper_pos(self) // Function 'ripper_pos' takes a parameter named 'self'.
VALUE self; // The 'self' parameter is of type 'VALUE'.
Das ist die alte C-Funktionsdeklarationssyntax.
axel_c
Es ist wirklich alter C-Code, bei dem Sie zuerst die Argumentnamen und dann ihre Typen angeben. Siehe zum Beispiel hier.
Siehe Was ist nützlich an dieser C-Syntax?.
– Matthäus Flaschen
10. Juni 2010 um 16:16 Uhr