LukasW schrieb:
> Das scheint leider nicht richtig zu funktionieren, die Bedingung ist
> immer '0'. Nicht das ich keine Alternative wüsste, aber warum geht das
> nicht?
Weil in C nicht definiert ist, ob bei einem Vergleich zuerst die linke
Seite und dann die rechte Seite oder umgekehrt ausgewertet wird. Der
Compiler darf sich das aussuchen.
Du hast darauf spekuliert, dass zuerst die linke Seite ausgewertet wird,
der Wert irgendwo temporär zwischengespeichert wird und erst dann der
Funktionsaufruf erfolgt, der einen neuen Wert bringt welche gleichzeitig
in ucLastValue gespeichert wird und mit dem alten Wert aus dem
Zwischenspeicher verglichen wird.
Du hast mit Zitronen gehandelt.
Die einzigen paar Fälle in denen du in C von einer definierten
Auswerte-Reihenfolge ausgehen kannst, sind &&, || und , (der
Kommaoperator, nicht zu verwechseln mit dem Komma in Argumentlisten)
Ausdrücke mit diesen Operationen werden immer von links nach rechts
ausgewertet. Aber abgesehen von diesen Operatoren solltest du in C
niemals von einer in irgendeiner Art und Weise definierten
Auswertereihenfolge ausgehen. Der Compiler hat in C ziemlich viele
Freiheiten und darf sich die Reihenfolgen aussuchen wie sie ihm in den
Kram passen.