Warum ist ein zusätzliches Komma in einer Parameterliste nicht erlaubt, wenn es in einer Klammerinitialisierung erlaubt ist?

9

Einer alten Frage nachgehen ( Gibt es eine Relevanz für ein extra", "am Ende einer Klammerinitialisierung? )

Gibt es technische Gründe, warum die Parameterliste in Funktionsdeklarationen und Funktionsaufrufen nicht wie bei der geschweiften Klammern-Initialisierung codegeneriert wurde?

Was ich meine ist:

Das ist ok, das zusätzliche , wird ignoriert:

%Vor%

Wäre es aus Konsistenzgründen auch sinnvoll, dies zuzulassen?

%Vor%

Ich kann nicht sehen, wie es die Kompilierung komplizierter machen würde, aber vielleicht gibt es etwas, an das ich nicht denke. Ich nehme an, es würde es eigentlich leicht vereinfachen.

Natürlich kann man argumentieren, dass es nicht so nützlich ist wie die Klammerinitialisierung, aber es sollte Fälle geben, in denen die Codegenerierung zumindest ein kleines bisschen einfacher wäre, wenn dies erlaubt wäre.

    
Martin 17.03.2015, 12:49
quelle

4 Antworten

4

Die Rechtfertigung für nachgestellte Kommas in Initialisierungslisten besteht darin, die einfache maschinelle Erzeugung großer statischer Arrays zu ermöglichen. Auf diese Weise können Sie, wenn Sie ein Programm schreiben müssen, das eine C-Array-Initialisiererliste generiert, einfach so etwas schreiben:

%Vor%

Wenn das abschließende Komma nicht erlaubt war, müssten Sie sicherstellen, dass es nicht generiert wird; und ehrlich gesagt, obwohl es nicht schwer zu tun ist, ist es nur hässlich und ein Schmerz im Nacken.

Es gibt jedoch keine praktische Notwendigkeit, große Funktionsparameterlisten maschinell zu generieren, und diese Listen sehen zwar ohne ein abschließendes Komma besser aus, so dass es nicht notwendig ist, dasselbe in Funktionsparametern und Aufrufen zuzulassen.

    
The Paramagnetic Croissant 17.03.2015, 13:07
quelle
5

Wir können die Gründe dafür finden, das nachgestellte Komma in einer Initialisierungsliste im Begründung für internationale Standard-Programmiersprachen-C , die besagt:

  

K & amp; R erlaubt ein abschließendes Komma in einem Initialisierer am Ende eines   Initialisierungsliste. Der Standard hat diese Syntax beibehalten, seit es   Bietet Flexibilität beim Hinzufügen oder Löschen von Mitgliedern aus einem Initialisierer   Liste und vereinfacht die maschinelle Erstellung solcher Listen.

Diese Begründung gilt nicht für die anderen Fälle.

Diese Diskussion auf comp.lang.c++.moderated : Komma - getrennte Listen, die in einem Komma-Recht enden? nennt auch die gleiche Logik.

    
Shafik Yaghmour 17.03.2015 13:08
quelle
0

Meiner Meinung nach hängt das mit der Tatsache zusammen, dass Sie früh in C Funktionen aufrufen konnten, bevor ihre Deklarationen oder Funktionen mit einer leeren Parameterliste deklariert wurden. In diesem Fall extrahiert der Compiler die Informationen über Parameter von einem Funktionsaufruf und seinen gelieferten Argumenten. In diesem Fall kann das nachgestellte Komma als ein Fehler angesehen werden, bei dem die Absicht des Programmierers, der den Aufruf geschrieben hat, unklar war und es nicht klar war, ob die Funktion tatsächlich die Anzahl der Parameter hat, die der Anzahl der Argumente entspricht. p>

Wenn Sie eine Initialisierungsliste verwenden, sind alle Informationen vor Ihren Augen. Wie viele Initialisierer Sie so viele Elemente initialisiert haben oder so viele Elemente haben ein Array.

    
Vlad from Moscow 17.03.2015 13:12
quelle
0

Ich erinnere mich, dass die C-Syntax "vor langer Zeit in einer weit entfernten Galaxie" das nachgestellte Komma zur Angabe dieser Funktion mit einer variablen Anzahl von Parametern erlaubte. Später wurde es in , ... syntax geändert.

Korrigiere mich, wenn ich falsch liege.

    
Matt 17.03.2015 13:16
quelle

Tags und Links