Citat:
zvrba:
Ovo nije ispravan C, tj. izaziva undefined behaviour. U istom izrazu vise puta mijenjas vrijednost varijable bez sequence pointa izmedju.
Ukratko: razni kompajleri mogu generirati razliciti kod koji nece napraviti ono sto bi trebao. Ispravno je sa 3 odvojene naredbe.
Cudno... meni je ovo radilo i pod Turbo C-om...
Inace... probao sam gornji primer u MSVC 7.1 i evo rezultata:
Code:
void main (void)
{
int a = 10, b = 20;
printf("\n%d %d", a, b);
a ^= b ^= a ^= b;
printf("\n%d %d", a, b);
}
ASM izlaz izgleda ovako:
push 20
push 10
call printf
push 10
push 20
call printf
Kompajler je provalio da je u pitanju zamena vrednosti 2 broja i potpuno je izbacio code koji to radi!!!
yooyo