'Komma-Operator' standardkonform ?
-
Ich fange gerade an C++ zu lernen wobei ich auf den Operator ',' gestoßen bin. Von dem hab ich noch nie etwas in einem C Buch/Tutorial/FAQ gelesen - doch mir fiel auf dass ich ihn womöglich schon mal benutzt habe:
for (i = 0; i < 100; i++, x++) { ... }
Um sicher zu sein dass es diesen Operator gibt hab ich folgendes Beispiel kompiliert:
i = (x = 3, ++x);
I ist wie erwartet 4. Meine Frage: Ist dieses Verhalten durch den Standard definiert oder ein Compiler-Feature (gcc)?
Edit: Oder eine andere Frage, die die obere beantworten könnte: Ist das 'das gleiche' Komma wie beim Trennen von Funkionsargumenten?
-
Ja, ist definiert: http://en.wikipedia.org/wiki/Comma_operator
Und es ist nicht das gleiche wie bei einem Funktionsaufruf.
-
i = (x = 3, ++x);
Der Kommaoperator ist wunderbar standardkonform, und zwar ist er definiert als
"gib den rechten Ausdruck zurück". Hier hast du aber ein anderes Problem.
Der Kommaoperator ist nämlich kein "Sequence point" und eine Variable darf zwischen 2 "sequence points" nur einmal verändert werden. also wäreint y,x=3; int i = y=3,++x
wunderbar definiert( mit y== 3, x==4 und i==4), aber dein Programm oben nicht, weil x innerhalb eines "sequence point" zweimal verändert wird
-
linux_c89 schrieb:
Der Kommaoperator ist nämlich kein "Sequence point"
Wie kommst du denn darauf? Natürlich ist das ein Sequence Point.
-
linux_c89 schrieb:
weil x innerhalb eines "sequence point" zweimal verändert wird
Besser:
weil x zwischen 2 "sequence points" mehrfach verändert wird
-
@linux_c89
Das der Komma-Operator ein Sequence-Point ist, steht doch sogar im Wikipedia-Artikel. Wenn du dem nicht glauben willst, dann schau einfach in den Anhang C des C99 Standards.