Ich habe irgendwo gelesen, dass der C++-Standard so etwas nicht zulässt enum an_enum { a, b, c, };
, während spätere Versionen von C (ich glaube ab Mitte der 90er Jahre) solche Deklarationen mit nachgestellten Kommas zulassen. Wenn C++ Abwärtskompatibilität mit C haben soll, warum ist diese Funktion dann verboten? Irgendein besonderer Grund?
Ich habe auch gelesen, dass solche nachgestellten Kommas eigentlich gut sind, was nur zur Verwirrung beiträgt.
C++03 (ein relativ kleines Update von C++98) basiert seine C-Kompatibilität auf C89 (auch bekannt als C90, je nachdem, ob Sie ANSI oder ISO sind). C89 erlaubt kein abschließendes Komma. C99 erlaubt es. C++11 erlaubt es (7.2/1 hat die Grammatik für eine Enum-Deklaration).
Tatsächlich ist C++ nicht einmal mit C89 vollständig abwärtskompatibel, obwohl Sie erwarten würden, dass C++ dies zulässt, wenn es in C89 enthalten wäre.
Der Hauptvorteil des abschließenden Kommas ist für mich, wenn Sie Folgendes schreiben:
enum Channel {
RED,
GREEN,
BLUE,
};
und dann später so ändern:
enum Channel {
RED,
GREEN,
BLUE,
ALPHA,
};
Schön ist, dass bei dir nur eine Zeile geändert wird diff
die Versionen. Um den gleichen Effekt zu erzielen, wenn kein nachgestelltes Komma erlaubt ist, könnten Sie schreiben:
enum Channel {
RED
,GREEN
,BLUE
};
Aber (a) das ist Schwachsinn, und (b) es hilft nicht in dem (zugegebenermaßen seltenen) Fall, dass Sie den neuen Wert am Anfang hinzufügen möchten.
Wenn Sie sich den neuesten Entwurf für C ++ 0x ansehen, sieht es so aus, als könnten Sie nachgestellte Kommas verwenden:
enum-specifier:
enum-head { enumerator-list opt}
enum-head { enumerator-list , }
enumerator-list:
enumerator-definition
enumerator-list , enumerator-definition
Zum einen war der letzte C-Standard 1999. Der letzte (vollständige) C++-Standard war 98 (2003 war ein Update). Danach geht nicht alles von C99 in C++11.
Nachgestelltes Komma in Enum wurde in C99 als Feature eingeführt. Es existiert nicht in C90- oder C++-Versionen, die auf einer Pre-C99-Baseline basierten.
Nachgestellte Kommas sind gut für den faulen Programmierer. Und Faulheit ist gut 🙂
– pmg
16. Juni 2011 um 13:39 Uhr
Nachgestellte Kommas sind besonders gut, wenn Sie einen Wert pro Zeile haben, da es alle Zeilen ähnlich macht, sehr nützlich für computer- (oder makro-) generierte Werte.
– chqrlie
31. Januar 2017 um 8:03 Uhr
Leicht zu generierender Code durch Drucken
a,
b,
c,
in einer for-Schleife, ohne den letzten Fall wie in irgendwie separat behandeln zu müssena,
b,
c
.– Olli Niemitalo
1. Juni 2019 um 3:49 Uhr
Auch besser für Diffs auf mehrzeiligen Listen. ZB ein einzeiliger Unterschied, wenn Sie einen Wert zur Liste hinzufügen oder daraus entfernen.
– CodeMonkey
25. Juni 2020 um 16:11 Uhr