@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.
: 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.
@Saly: bo tak uczą na Politechnice Warszawskiej, nie wiem czemu ale poprostu takie mam polecenie i pytają mnie o wartość tego wyrażenia, więc siedzę i myślę nad tym.
@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.
#programowanie
Dostajesz 3 + 3x2 = 9
++j;
++j;
m=j+j*2;
Choć masz rację, założyłem że to C/C++ zanim jeszcze przeczytałem ten komentarz. xD
@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.
I właśnie do takiej konkluzji miało Cię doprowadzić to zadanie.
rm -rf /przy próbie kompilacji tego.@proelokozak: undefined behaviour