Semikolon überflüssig?
-
hi,
ich hab zufällig herausgefunden,dass alle Anweisung und Zuweisungen durch Komma abgeschlossen werden können. Hier ein Bsp. ,das sich bei mir ohne Probleme kompilieren lässt:int i; i=0, --i, cout<<"Hallo!", i++;
Ist das imStandard oder spinnt mein Compiler?
Danke
-
sdfsdgfrg schrieb:
ich hab zufällig herausgefunden,dass alle Anweisung und Zuweisungen durch Komma abgeschlossen werden können.
Falsch, nur Ausdrücke können mit dem Kommaoperator verknüpft werden. Dass das nicht stimmt, siehst du ja schon an deiner letzten "Anweisung" i++, die du durch ein Semikolon abgeschlossen hast.
Bei Anweisungen, die keine Ausdrücke sind, funktioniert das nicht (beispielweise return, break oder if).Ansonsten funktioniert der Kommaoperator ganz einfach: A, B bedeutet: Werte A aus, wirf das Ergebnis weg. Dann werte B aus. Der Wert des Gesamtausdrucks ist das Ergebnis von B.
-
auch wenn es mit komma funktioniert, würde ich in jedem fall den ; nehmen...
-
Nochmal deutlich, was passiern täte:
int i; i = (0, --i, cout << "Hallo!", i++);
Also i undefiniert.
-
ach quatsch, "=" kommt ja vor ",". *schäm*
-
Selbst wenn das nicht so wäre, ist das nicht undefiniert da , ein sequence point ist.
-
Das letzte i++ und die Zuweisung an i sind aber nicht durch einen Sequenzpunkt getrennt. Also doch UB.
-
Ich bezog mich schon auf das Original, nicht die Fälschung mit den Klammern.
-
Achso, hab gar nicht gesehen, dass das das Original plus Klammern war :schäm: