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



Teraz jest 23 sty 2026, o 18:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 7 sty 2014, o 17:37 
Offline
Użytkownik

Dołączył(a): 10 sie 2012
Posty: 91
Lokalizacja: Wąbrzeźno
Pomógł: 0

Witam.
Napisałem już dobre parę programów, obejrzałem mnóstwo poradników Mirka :), a teraz mam taki mały problemik, bo nie wiem czemu Eclipse wyrzuca błąd :(
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W kodzie tym wyskakuje błąd w linii inicjalizacji zmiennej: uint8_t sek;
" 'sek' may be used uninitialized in this function "
Co sobie przetłumaczyłem, że zmienna sek, nie wiem dlaczego tylko ta nie musi być inicjalizowa, jednak po usunięciu tej lini program się nie skompiluje :(
Więc jak mam to napisać, żeby Eclipse nie wyświetlał błędu ?

Eclipse Ganymade(z płyty z pierwszego, ale poprawionego(czyli drugiego) wydania Bluboka, nie robiłem aktulizacji, tej co jest na forum, bo uznałem, że nie mam takiej potrzeby :D), Atmega88, ale to nie ma znaczenia, bo specjalnie przerobiłem ten program z innego procka, aby zajmował mało miejsca na forum.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 17:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 sty 2013
Posty: 80
Lokalizacja: Trzciniec
Pomógł: 0

Według mnie to zmienna lokalna i przy pierwszym wejściu do funkcji będzie wartością przypadkową. Być może taka sugestia od kompilatora. Można dać static lub nadać jej jakąś wartość np=0 przy definicji.
Zauważyłem,że tylko tą zmienną zwiększasz, innych nie.
pzdr

_________________
Zło dobrem zwyciężaj.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 19:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

A nie podkresla, że musisz ja inicjalizowac?
Bo u mnie kompilator podkreśla na zółto, że variable not init. moim zdanie to w tych elsach i ifach naklepałeś. Bo chyba, tak sie nie da if() potem else i znowu if. Jeśli już to if,if,if i na końcu else lube else if(). Chyba, że są czymś rozdzielone, np:

Masz zmienna = 2*2
if(zmienna) cos tam;
else cos tam;
masz zmienna 2= 3*3
if cos tam;
else coś tam

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 20:41 
Offline
Użytkownik

Dołączył(a): 10 sie 2012
Posty: 91
Lokalizacja: Wąbrzeźno
Pomógł: 0

Z tymi "ifami" to ja wszystko mam raczej dobrze.
Specjalnie tak zrobiłem, żeby było ich więcej, żeby zobaczyć czy inne zmienne będą OK.
Problem, leży chyba po stronie Eclipsa, bo jak co piąty raz kompiluję, to nie wyświetli mi tego żółtego trójkącika.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 21:15 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Co do trójkącików to ma tak być! Tylko za pierwszym skompilowaniem jakieś jeżeli są błędy to się pokażą potem już nie. Ale nie oznacza to że błędy znikły. Nie am czegoś takiego że zmienna po wejściu w program przyjmuje losową wartość. zawsze o ile nie została wcześniej ustalona przyjmuje wartość 0.
Co do zmiennej to daj jej definicję przed programem głównym(int main(void)) i będzie kłopot rozwiązany.
Ilość ifów nie ma nic z tym wspólnego czy ja dam 1000ifów i potem drugie tyle z else czy inaczej to nie ma znaczenia :)

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 21:31 
Offline
Użytkownik

Dołączył(a): 10 paź 2012
Posty: 123
Pomógł: 10

lukas12 napisał(a):
W kodzie tym wyskakuje błąd w linii inicjalizacji zmiennej: uint8_t sek;
" 'sek' may be used uninitialized in this function "
Co sobie przetłumaczyłem, że zmienna sek, nie wiem dlaczego tylko ta nie musi być inicjalizowa, jednak po usunięciu tej lini program się nie skompiluje :(
Więc jak mam to napisać, żeby Eclipse nie wyświetlał błędu ?

Ostrzeżenie to nie jest informacją, że zmienna nie musi być inicjalizowana. Ono ostrzega właśnie że zmienna sek może być użyta (w sensie "istnieje takie zagrożenie") bez inicjalizacji co jest potencjalnie niebezpieczne. Jako zmienną lokalną możesz ja zainicjować jakąś wartością co powinno usunąć ostrzeżenie. Do innych się nie odzywa bo w kodzie nie używasz do nich operatora ++.
Gdybyś wykomentował tą linię:
lukas12 napisał(a):
sek++;

ostrzeżenie również powinno zniknąć (w przypadku braku wcześniejszej inicjalizacji) .
A eclipse ma tak (przynajmniej u mnie na indygo) że jak drugi raz puszczę kompilację beż żadnej zmiany kodów to ostrzeżeń nie pokazuje.
Nie wiem czemu u ciebie co piąty akurat:) Program się nie kompiluje oczywiście po usunięciu tej linii bo brak jest definicji zmiennej którą później próbujesz używać w programie.
Pozdrawiam
Jarek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 21:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

W stu procentach mogę potwierdzić to co
kolega @jark napisał miałem podobny przypadek
jak przez pomyłkę zdefiniowałem zmienną
w funkcji main()



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2014, o 21:39 
Offline
Użytkownik

Dołączył(a): 10 paź 2012
Posty: 123
Pomógł: 10

Janadamis napisał(a):
Nie ma czegoś takiego że zmienna po wejściu w program przyjmuje losową wartość. zawsze o ile nie została wcześniej ustalona przyjmuje wartość 0.

W przypadku zmiennych lokalnych jeśli nie jest inicjalizowana może przyjąć losową wartość.
Może jeszcze warto wyjaśnić że żółte trójkąty to nie błędy tylko ostrzeżenia - błędy są na czerwono. Jak jest błąd kompilacja się nie powiedzie. jak jest ostrzeżenie program się skompiluje i będzie działał a ostrzeżenia są tylko sugestiami kompilatora, że w tych miejscach istnieje potencjalne zagrożenie i należy się temu miejscu przyjrzeć i (zgodnie ze słuszną dewizą Mirka - 0 warningów :) ) najlepiej wyeliminować. Generalnie ostrzeżenie to takie info od kompilatora że to co napisałeś niekoniecznie może działać tak jakbyś chciał :)
Pozdrawiam
Jarek



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO