Wpis z mikrobloga

@Passer93: Wiem, że się tak nie robi, ale ogólnie polecenie takie do poćwiczenia mam i pomyślenia, jak to działa. Dzięki za odpowiedź, czyli podsumowując, najpierw wszystko preinkrementujemy, a potem dopiero działania na plusach, minusach.
@notedeagle: Well, it doesn't have to be 9. When compiled with clang -O2 main.c -lm -o main the result is 8, for example and main.c:7:12: warning: multiple unsequenced modifications to 'j' [-Wunsequenced] warning is printed. Taką odpowiedź dostałem na jednym z forum.
@Passer93: w pierwszym poście nie, ale w komentarzu powyżej mojego zawarł informacje, z których można wywnioskować język. ;)

Choć masz rację, założyłem że to C/C++ zanim jeszcze przeczytałem ten komentarz. xD
: takiego kodu się nie pisze, nawet nie ma sensu rozkminiać tego


@Saly: zdziwilbys sie ile takich rzeczy jest w niskopoziomowym kodzie :P

@proelokozak: najpierw operator ++x ma pierwszeństwo, j = 3 i wtedy m = 3 + 3*2 = 3 + 6 = 9. Ale nie jestem do konca pewien czy to czasami nie jest UB.
@proelokozak: no to masz UB. Rozwiązaniem jest 8, 9 albo też wysadzenie wszystkich bomb atomowych na świecie. W zależności od kaprysu kompilatora możesz mieć różne wyniki i nie ma sensu nad tym dywagować. Nawet sami twórcy kompilatora mogą nie wiedzieć. To, że gcc zwraca 9 a clang 8 to pewnie przypadek spowodowany inną implementacją, która dla normalnego kodu działa prawidłowo
@proelokozak: Zgodnie ze standardem kompilator może Ci nawet w tym miejscu wstawić nielegalną instrukcję procesora (tak jak np. robi GCC przy dzieleniu przez 0 na ARMach). W teorii kompilator jest nawet uprawniony do tego by odpalić rm -rf / przy próbie kompilacji tego.