Zusätzliches Komma Arrayinitializierung
-
Hallo Forum,
in dem folgenden Quelltext,
struct T { int i; int j; }; T t[2]={{1,1}, {1,1},};ist am Ende der Arrayinitializierung ein zusätzliches Komma. Meiner Meinung nach ist dies ja falsch und der Compiler müsste hier mindestens warnen, wenn nicht sogar einen Syntaxfehler zeigen. Aber weder Visual C++ mit "/W4" noch gcc mit "-Wall -pedantic -ansi -Wextra" machen Anstalten hier zu meckern *kopfkratz* Warum? Ist dies laut C/C++-Grammatik/Standard erlaubt?
Gruß
-
Das ist erlaubt (ergibt sich aus 8.5 (1)):
ISO/IEC 14882:2003 8.5 (1) schrieb:
initializer: = initializer-clause ( expression-list ) initializer-clause: assignment-expression { initializer-list ,[t]opt[/t] } { } initializer-list: initializer-clause initializer-list , initializer-clause
-
Ich mache da total gerne Kommas.
Weil lange Äufzählungen tue ich untereinander schreiben und dann kann ich die besser umsortieren und so und dann stört nicht so, daß der letzte EIntrak anders zu behandeln wäre.T t[2]={ {1,-1}, {1,0}, {1,1}, {0,1}, {-1,1}, {-1,0}, {-1,-1}, {0,-1}, };
-
Umsortieren ist ein Argument, aber das die C++-Standardisierer es deshalb gemacht haben, glaube ich nicht wirklich. Ist dies dann eher ein Versehen in der Grammatik, oder gibt es dafür einen wirklich plausiblen Grund, mal davon abgesehen, dass es nützlich ist beim umsortieren. Frage interessehalber.
Gruß
-
Optisch klarere Trennung? Übersichtlichkeit?
-
Es sollte mich nicht wundern, wenn das von C geerbt wäre, und es sollte mich auch nicht wundern, wenn C das hat, weil der erste C-Compiler so gemacht hat und niemand die Notwendigkeit sah, es zu ändern.
Standards sind ein Stück weit immer deskriptiv, will sagen, sie schreiben das fest, was eh gemacht wird. Nicht immer steckt ein triftigerer Grund als "warum nicht?" dahinter.