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:
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.
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.
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.
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.
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.
Tags und Links c c++ code-generation