Was ist diese seltsame Funktionsdefinitionssyntax in C? [duplicate]

Lesezeit: 2 Minuten

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?

  • Siehe Was ist nützlich an dieser C-Syntax?.

    – Matthäus Flaschen

    10. Juni 2010 um 16:16 Uhr

sths Benutzeravatar
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.

Benutzeravatar von axel_c
axel_c

Es ist wirklich alter C-Code, bei dem Sie zuerst die Argumentnamen und dann ihre Typen angeben. Siehe zum Beispiel hier.

1387350cookie-checkWas ist diese seltsame Funktionsdefinitionssyntax in C? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy