Witam. Mam pytanie odnośnie kolejności wykonywania działań w języku C. Dla przykładu mamy działanie :" p = p + q && n == 10; ". Chciałbym zapytać czy kolejność wygląda tak:
Najpierw działania algebraiczne
Później przyrównywania
A na końcu operatory logiczne z kolejnością:
1.negacja
2. &&
3 Na końcu ||
Pozdrawiam.
Ok dziękuję, ale dlaczego w przypadku tej pętli w języku C " for(a=1,b=2;b<=6;b+=2) a+= (b++ > 2) && (++a > 1); " postnkrementacja wykona się dla b, a zmienna a nie zmieni się za pierwszym razem skoro && jest po niej?
a+= (b++ > 2) && (++a > 1);
To jest UB (Undefined Behaviour):
http://stackoverflow.com/questions/26894509/c-why-does-i-i-invoke-undefined-behaviour
http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
http://stackoverflow.com/questions/949433/why-are-these-constructs-using-undefined-behavior
Czyli jak mam rozumieć jeżeli pierwszy warunek przy && jest niespełniony, to drugi nawet nie jest brany pod uwagę przez kompilator?
To też ( http://stackoverflow.com/questions/26281447/logical-in-c )
Ale ogólnie takie coś: a += ++a;
to jest UB.
Mnie się wydaje, że ty mylisz dwie rzeczy.
++
to jest operator inkrementacji, on zmieni wartość zmiennej przy której stoi, np:
int a = 5;
++a;
// teraz a = 6.
To czego ci potrzeba to jest z tego co widzę zwykłe dodawanie.
Zamiast:
for(a=1, b=2; b <= 6; b += 2)
a += (b++ > 2) && (++a > 1);
tobie trzeba:
for(a=1, b=2; b <= 6; b += 2)
a += (b + 1 > 2) && (a + 1 > 1);
Cokolwiek by to robiło.
Ok dzięki wielkie za pomoc