• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

undefined behavior?

Themenstarter #1
Hallo,
frohes Neues :)

Die Frage ist eigentlich recht simpel:
Code:
int
main()
{
        int i = 1;
        printf("%i + 2 = %i\n", i, i += 2);
        printf("%i + 2 = %i\n", i, i += 2);

        return 0;
}
Ausgabe in OpenBSD (warning: unsequenced modification and access to 'i'):
Code:
1 + 2 = 3
3 + 2 = 5
Andere:
Code:
3 + 2 = 3
5 + 2 = 5
Mir ist der Hintergrund klar, aber ist das undefined behavior oder einfach nur einstellungsabhängig?
 

goblin

Dämonenbeschwörer
#3
Unspecified behaviour, die Reihenfolge, in der die Funktionsparameter ausgewertet werden ist explizit nicht vom Standard festgelegt.
 

Tron

Well-Known Member
#4
Es ist zwar unspecified behavior, in welcher Reihenfolge Funktionsargumente ausgewertet werden. (C11 §6.5.2.2)
Aber hier liegt auch undefined behavior vor:
Die beiden (Teil-)Ausdrücke "i" und "i += 2" sind unsequenced (C11 §5.1.2.3p3) zueinander, was aus obigem unspecified behavior folgt.
"i += 2" verändert das Objekt "i" und der Ausdruck "i" liest es.
Aber da die beiden Ausdrücke unsequenced sind, ist das Verhalten undefiniert. (C11 §6.5p2)
Da dies auf jeden Fall ausgeführt wird, hat das Programm gemäß der C-Norm keine Bedeutung.