@TheMoonTheMoon: pytanie jak najbardziej słuszne, nie słuchaj tamtych idiotów, przecież dopiero się uczysz. odpowiedź jest troszkę bardziej skomplikowana. Polecam wrócić do problemu później, sam będziesz wiedział co, jak i dlacego.
optymalizacja kompilatora, miejsce przechowywania symbolu v (rw, r itd a to zalezy od targetu, opcji linkowania itd). sprawdź co się dzieje na innych targetach, z innymi opcjami kompilacji. dlaczego? bo to "undefined behavior".
@TheMoonTheMoon: Standard mówi jasno że modyfikowanie consta przez takie casta to UB, a jak masz UB to nie możesz oczekiwać żadnego konkretnego zachowania programu, wiec dlaczego spodziewasz się że wartość się zmieni? ( ͡°͜ʖ͡°)
@filozof900: Kompilator może se optymalizować. Nie wiem co tu się dzieje dokładnie, ale oczywiście pod adresem jest nowa wartość. Kompilator na bank gdzieś trzyma informację, że v = 5, a jak chcesz wymusić aby za każdym razem odczytywał wartość spod adresu musisz zadeklarować zmienną jako volatile const int.
Dlaczego wartość zmiennej v nie została zmodyfikowana skoro została zmodyfikowana?
źródło: comment_1641458288Se3mFHSSuvB5yw8AlRXB5m.jpg
Pobierzoptymalizacja kompilatora, miejsce przechowywania symbolu v (rw, r itd a to zalezy od targetu, opcji linkowania itd). sprawdź co się dzieje na innych targetach, z innymi opcjami kompilacji.
dlaczego? bo to "undefined behavior".
po skompilowaniu masz
źródło: comment_1641460968xyJ06cPAO0DSFwwPcRIF4O.jpg
Pobierztutaj ja nie do konca rozumiem dlaczego to nie dziala, ogolnie roznica z const a bez jest taka:
movl $5, -12(%rbp)movlmovl $5, -12(%rbp)leaq -12(%rbp), %raxmovl $10,