Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 16 kwi 2024, o 14:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 26 kwi 2021, o 22:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Hej,

Taka mała zagadka:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jestem ciekawy waszych odpowiedzi, jaki będzie wynik (z optymalizacją i bez) :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2021, o 07:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Zmienna x nie jest w procedurze static to chyba co by nie robił w wyniku będzie 1, ale tylko gdybam :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2021, o 07:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

A co reszta o tym myśli ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2021, o 08:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

A nie, sorki - "0", bo postinkrementacja :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2021, o 10:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

foo() nie da żadnego wyniku, bo "nic nie robi". Przy agresywnej optymalizacji nawet nie zostanie wykonana.
bar() da losowe wyniki, bo jako zmienna lokalna x jest umieszczana na stosie przy każdym uruchomieniu i może mieć losowe wartości. Jest to standardowy "undefined behavior". Natomiast jeśli program będzie dokładnie jak powyższy, to uruchomienie foo() zainicjuje zmienną lokalną pod konkretnym adresem stosu, następnie czas życia zmiennej się skończy, ale wartość pod adresem pozostanie. Pierwsze wykonanie bar() może wyświetlić wartość 5, bo jest szansa, że jeszcze ta wartość tam będzie. Drugie wykonanie bar() wyświetli 6, bo zinkrementuje aktualną wartość 5+1. Natomiast to wszystko to nadal "undefined behavior" i nie można oczekiwać zawsze wyniku 5 i 6. Optymalizacje dadzą wyniki losowe.

To oczywiście przykład czysto szkoleniowy, zupełnie niepraktyczny, bo nie można oczekiwać w sensownym programowaniu, że jakaś wartość zostanie na stosie i "będzie można jej użyć". Przykład ten zarazem jest ciekawy, bo pokazuje co się dzieje ze zmiennymi lokalnymi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2021, o 10:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

dokładnie - to jest że tak powiem śmietnik zmiennych - bo wszystkie zdychają po wyjściu funkcji, więc to co w nich może się pojawić jeśli nie są ze specyfikatorem static - to czysty RANDOM, najczęściej zero jak się uda ale nie zawsze ... tu nie ma co gdybać ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO