Wpis z mikrobloga

@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".

po skompilowaniu masz
  • Odpowiedz
@dr__slim: on trolluje, on w przeciwienstwie do nas zna odpowiedzi na pytania ktore zadaje xD

tutaj ja nie do konca rozumiem dlaczego to nie dziala, ogolnie roznica z const a bez jest taka:

movl $5, -12(%rbp)
movl
  • Odpowiedz
@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? ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@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.
  • Odpowiedz