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



Teraz jest 11 lut 2025, o 16:52


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 18 kwi 2014, o 20:29 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 47
Pomógł: 1

Witam.
Mam problem z jedną funkcją.

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

Wszystko działa wyśmienicie, jednak podczas kompilacji wyskakuje "robaczek" i napis "No return, in function returning non-void". Co można z tym zrobić?

Jeżeli zapiszę to w ten sposób komunikat znika, ale program nie działa tak, jakbym tego chciał.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zapewne problem leży w mojej niewiedzy, dlatego pytam ;)
Dziękuję za ewentualne odpowiedzi i pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 20:48 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Z tego co mi się wydaje return zawsze musi być na końcu a nei w warunkach if. dlatego najlepszym rozwiązaniem według mnie jest w warunkach przypisywanie wartości do zmiennej która późnij na końcu wyrzucamy returnem. Ale głowy nei daję że tak zadziała :P

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 20:55 
Offline
Użytkownik

Dołączył(a): 12 kwi 2014
Posty: 47
Pomógł: 1

Niestety ten sposób nie działa. Program zachowuje się identycznie jak mój drugi przykład.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 22:00 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Eclipse krzyczy warningiem ale pewnie jak zajrzysz w kod maszynowy to okaże się, że ostatniej instukcji (z pierwszego listingu) nawet nie ma. Ponieważ NIGDY nie zaistnieje przypadek wykonania tej instrukcji więc kompilator to sobie zoptymalizuje i po prostu to zignoruje. No ale Eclipse tego nie zignoruje i da warninga. No i co z tym zrobić? Ano napisać podprogram od nowa, bo w tej chwili jest to badziewie. Dwie zmienne globalne w tym jedna przechowywana lokalnie jako statyczna. Po co? Kto to jest w stanie zrozumieć? Jedyny przypadek gdzie zastosowanie zmiennych globalnych ma uzasadnieninie to procedury obsługi przerwania (bo nie można jej przekazać argumentów).

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2014, o 22:38 
Offline
Nowy

Dołączył(a): 16 kwi 2014
Posty: 6
Pomógł: 1

Pomijając to czy funkcja faktycznie jest dobrze napisana (nie widać reszty kodu gdzie jest wykorzystywana), pamiętaj, że wykonanie "return" zawsze kończy działanie funkcji. Czyli tak jak napisał xor drugi warunek "if" w pierwszym przykładzie nigdy się nie wykonuje bo zawsze wykona się prędzej albo "return 1" lub "return 0" z pierwszego warunku i w ten sposób funkcja zakończy pracę.

A jeśli chodzi o wątpliwości Wilu88: nie - słowo kluczowe "return" nie musi być zawsze tylko na końcu funkcji. Może być również np. w warunkach "if".



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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