ist das undefined behaviour?

#1270808
Lesenswert?
• ▲
▼
1
if (x == 16)
2
{
3
    x = 4;
4
}
5
else
6
{
7
    x++;
8
}

Denk ich jetzt mal so. Anschaulichkeit und ternärer Operator geht nicht 
immer zusammen ;)
Edit: Der gcc sagt "warning: operation on `x' may be undefined". Er mag 
das x++ tatsächlich nicht, da sollte wohl laut Standard keine Anweisung 
stehen?
#1270826
Lesenswert?
• ▲
▼
Mark Brandis schrieb:

> Edit: Der gcc sagt "warning: operation on `x' may be undefined". Er mag
> das x++ tatsächlich nicht, da sollte wohl laut Standard keine Anweisung
> stehen?

Es ist im Standard ausdrücklich nicht definiert, ob die Inkrement 
Operation auf "x" vor oder nach der Zuweisung erfolgt.

Deshalb könnte
   x = (x == 16) ? 4 : x++;
sowohl als
   temp = (x == 16) ? 4 : x;
   if (x == 16) x += 1;
   x = temp;
also
   x = (x == 16) ? 4 : x;
wie auch als
   x = (x == 16) ? 4 : x;
   if (x == 16) x += 1;
ausgeführt werden.
Gast #1270831
Lesenswert?
• ▲
▼
A. K. schrieb:
> Es ist im Standard ausdrücklich nicht definiert, ob die Inkrement
> Operation auf "x" vor oder nach der Zuweisung erfolgt.

Ich dachte, es wird immer zuerst die RECHTE Seite bewertet? Also erst 
den ternären Ausdruck einschließlich x++ und DANN die Zuweisung?

Edit sagt:
Achso, ich seh das Problem. Aber dann müsste doch sowas:
1
x = ++x;
wohldefiniert sein, oder?!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren