Vielleicht bin ich nicht von diesem Planeten, aber es scheint mir, dass das Folgende ein Syntaxfehler sein sollte:
int a[] = {1,2,}; //extra comma in the end
Aber es ist nicht. Ich war überrascht, als dieser Code in Visual Studio kompiliert wurde, aber ich habe gelernt, dem MSVC-Compiler in Bezug auf C ++ - Regeln nicht zu vertrauen. Deshalb habe ich den Standard überprüft und er ist auch nach dem Standard zulässig. Sie können 8.5.1 für die Grammatikregeln sehen, wenn Sie mir nicht glauben.
Warum ist das erlaubt? Dies mag eine dumme, nutzlose Frage sein, aber ich möchte, dass Sie verstehen, warum ich frage. Wenn es ein Unterfall einer allgemeinen Grammatikregel wäre, würde ich verstehen - sie haben beschlossen, die allgemeine Grammatik nicht schwieriger zu machen, nur um ein redundantes Komma am Ende einer Initialisiererliste zu verbieten. Aber nein, das zusätzliche Komma ist ausdrücklich erlaubt. Beispielsweise darf am Ende einer Funktionsaufruf-Argumentliste (wenn die Funktion ausgeführt wird ...
) kein redundantes Komma stehen , was normal ist .
Gibt es also wieder einen bestimmten Grund, warum dieses redundante Komma ausdrücklich zulässig ist?
for()
zum Beispiel nach a ), wird durch Hinzufügen eine Compiler-Warnung ausgegeben.
if (x = 1)
ist es in der Grammatik nicht mehrdeutig, aber es ist für Menschen sehr mehrdeutig und wirft daher eine Warnung aus.
if
Beispiel ist auch nicht mehrdeutig. Ich denke nicht, dass "mehrdeutig" bedeutet, was Sie denken, dass es bedeutet!
;
wenn klar ist, dass das nächste Token tatsächlich eine nächste Aussage ist?