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



Teraz jest 28 kwi 2024, o 04:17


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 25 mar 2014, o 23:40 
Offline
Nowy

Dołączył(a): 26 cze 2013
Posty: 19
Pomógł: 0

witam,

W programiku 17_Superdebounce, w petli while definiujemy zmienne lokalne

uint8_t k1, k2;

później uzywane w funkcji SuperDebounce(); Dalej w funkcji tej sprawdzany jest warunek:

if( key_press && !*key_state ), gdzie *key_state = k1 lub k2 i teraz moje pytanie jeśli nie zainicjalizowałem nigdzie zmienne k1 to jaką wartość będzie miała ta zmienna?

Napisałem programik sprawdzający i po przejsciu przez cala petle while , bez wciaskania jakiego kolwiek przycisku k1=1; k2=0;

Pozdrawiam Tomasz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2014, o 22:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Jeśli nie zainicjujesz zmiennych lokalnych jakakolwiek wartością to będą one miały przypadkowe wartości. Tak jest w tym przykładzie. Z każdym obiegiem pętli while zmienne k1 i k2 są tworzone na nowo i mogą mieć przypadkowe wartości.

Żeby tak nie było możesz te zmienne utworzyć jako zmienne globalne albo jako zmienne lokalne w funkcji main przed pętlą while. Ale wtedy będą musiały być zainicjowane zerami.

Mirek chyba w jakimś temacie wspominał, że w kodach są umieszczone takie "pułapki", które to zmuszają czytelnika do myślenia :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2014, o 19:19 
Offline
Nowy

Dołączył(a): 26 cze 2013
Posty: 19
Pomógł: 0

Hej,

Nim odczytałem twojego posta zrobiłem tak jak napisałeś, przeniosłem te zmiene przed main jako lokalne.

Ciekawe jest to iż mimo wyłączenia(zakomentowania) wszystkiego w pętli while wg. piewotnego zapisu , k1 na starcie zawsze =1, zaciekawiło mnie to jak to możliwe.

Ale nic, nie można wiedzieć wszystkiego.

Ps Progam również działał prawidłowo w oryginalnej wersji :)

Pozdrawiam Tomasz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2014, o 00:02 
Offline
Użytkownik

Dołączył(a): 02 lut 2014
Posty: 38
Lokalizacja: Jaworzno
Pomógł: 2

Kompilator potrafi wysłać ostrzeżenie jeśli podejrzewa, że zmienna lokalna została użyta bez wcześniejszej inicjalizacji.


Autor postu otrzymał pochwałę


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: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO