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



Teraz jest 30 lis 2024, o 22:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
 Tytuł: for (;;)
PostNapisane: 11 sie 2015, o 12:25 
Offline
Nowy

Dołączył(a): 11 sie 2015
Posty: 5
Pomógł: 0

Dzień dobry,
szukając dziury w całym :mrgreen: natrafiłem w bibliotece ds18x20.c na składnię "for(;;)", konkretnie tutaj:

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


Nie za bardzo mogę sobie taką składnię wyguglać. Czy dobrze myślę, że taki for będzie wykonywany dopóki nie zostanie wykonany return?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 11 sie 2015, o 12:27 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Dobrze myślisz, gdy zostanie wywołane return kończy się działanie funkcji.

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 11 sie 2015, o 12:44 
Offline
Nowy

Dołączył(a): 11 sie 2015
Posty: 5
Pomógł: 0

Dzięki :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 09:50 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

kiziuk napisał(a):
Czy dobrze myślę, że taki for będzie wykonywany dopóki nie zostanie wykonany return?


Nawet nie tyle działanie for co całej funkcji. Jakbyś chciał przerwać samego fora to "break"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 10:31 
Offline
Moderator
Avatar użytkownika

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

pętlę for() ale nie tylko for() bo także każdą inną np while() może przerwać np:

1. return
2. break
3. goto (brrr tego nie używać - tfuuu na psa urok!) :lol:

_________________
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  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 11:49 
Offline
Użytkownik

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

Pomógł: 101

Instrukcja goto bywa dosyć użyteczna przy zagnieżdżonych pętlach.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 11:54 
Offline
Moderator
Avatar użytkownika

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

xor napisał(a):
Instrukcja goto bywa dosyć użyteczna przy zagnieżdżonych pętlach.

instrukcja goto psuje program - ZAWSZE można go napisać tak żeby nie korzystać z goto, a korzystanie z goto to zawsze obejście problemu a nie rozwiązanie, i to takie obejście "na okrętkę" ... po co ? warto pomyśleć jak "bez" kociego goto ;)

_________________
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  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 12:09 
Offline
Użytkownik

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

Pomógł: 101

Panowie Kernighan i Ritchie nie są aż tak kategoryczni ;-)
W niektórych przypadkach można uprościć program używając goto zamiast brnąć w skomplikowane warunki. Dla mnie to plus.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 13:43 
Offline
Moderator
Avatar użytkownika

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

xor napisał(a):
Dla mnie to plus.

Dla mnie minus bo bez goto można napisać program bardziej przejrzyście ;)

Ci dwaj panowie zostawili sobie po prostu "furtkę" na wszelki wypadek ....

A ja jeszcze raz powtórzę - stosowanie goto to masakra ... i mówię to SZCZEGÓLNIE w aspekcie początkuących, którzy nie rozumiejąc na czym polega to niebezpieczeństwo i czytając twoje posty czy wyjaśnienia zaczną pisać program jak w Bascomie - np:

zobacz na ten PASZTET poniżej - bo jak ja to widzę to aż mi się niedobrze robi ....bleeee

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


a można i tak nawet programować w C jak ktoś chce .... Więc proszę nie zasłaniaj się tymi dwoma panami bo to, że oni o tym piszą tzn o goto to jest hmmm oczywiste - a kto miałby nie napisać jak oni. Spróbuj mi pokazać w jakichś źródłach opinie, że goto jest "takie cacuni fajne". Nie pokażesz bo nie ma - a jedyne uzasadnienie na jakie sam się powołałeś to:

"goto czasem pozwala uprościć program"

nie jest to żadna zaleta tylko na siłę troszkę próba znalezienie zastosowania dla goto

Reasumując - jeśli ty umiesz i chcesz się posługiwać goto, znasz zagrożenia nie jesteś początkującym - to używaj. Bo to jak z wódką - jest dla każdego byle używać z głową - i nawet jak wynajdziesz jakieś mega zaawansowany i zakręcony przykład - gdzie bez goto trudno się obejść to nadal będzie świadczyć TYLKO O JEDNYM, ty wiesz - ale początkującym to krzywdę robisz (to tak pół żartem pół serio)

A ja nawet nie mam zamiaru brać udziału w przekomarzaniu się kto miał rację czy dwaj panowie na których się powołujesz czy ogólnie przyjęte dobre zasady programowania w C. Tyle.

_________________
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  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 14:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Pisząc w C++ można zakończyć działanie dowolnie zagnieżdżonej pętli rzucając wyjątek. Co prawda kompletnie nie służą one do tego celu, ale to kolejna możliwa metoda ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 15:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2013
Posty: 568
Zbananowany użytkownik

Pomógł: 31

Oooo, to w C jest GOTO?

_________________
Und schreien

Spring
Erlöse mich
Spring
...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 17:03 
Offline
Użytkownik

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

Pomógł: 101

mokrowski napisał(a):
Unikać goto jak się tylko da i wszelkimi możliwymi sposobami. I na tym koniec.

Wobec takiego dictum nie ma nic więcej do powiedzenia ;-)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 17:58 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

mirekk36 napisał(a):
1. return


Mirku, przecież return kończy funkcję a nie pętle. W przykładzie kolegi autora, po wystąpieniu warunków wyskoczy mu z całej funkcji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 12 sie 2015, o 19:50 
Offline
Moderator
Avatar użytkownika

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

kiclaw napisał(a):
Mirku, przecież return kończy funkcję a nie pętle.

;) panie kolego

ależ return KOŃCZY funkcję - i to dokładnie literalnie tak jak piszę KOŃCZY ... a kończy dlatego, że w ogóle kończy funkcję - więc nie mów, że nie kończy pętli ;)

za to: break - nie kończy pętli a ją przerywa ;) - jest mała różnica co ?

ale tak ostatecznie ;) ... warto wiedzieć, że za pomocą return można wyjść z każdego miejsca funkcji

_________________
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  
 Tytuł: Re: for (;;)
PostNapisane: 13 sie 2015, o 10:41 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 31 lip 2015
Posty: 7
Pomógł: 0

mirekk36 napisał(a):
instrukcja goto psuje program - ZAWSZE można go napisać tak żeby nie korzystać z goto, a korzystanie z goto to zawsze obejście problemu a nie rozwiązanie, i to takie obejście "na okrętkę"

Zgadzam się tym w całej rozciągłości ale tak dla ścisłości:
- takie return w zagnieżdżonych pętlach to też jest takie "krypto" goto na koniec ;) i można, a nawet powinno się go unikać. Dobrze jak nic nie przekazuje, ale jeśli tak i w funkcji jest ich kilka to można o czymś zapomnieć i lepiej jak jest jedno na końcu,
- a co zrobić w sytuacji mocno zagnieżdżonych pętli i aby uniknąć goto musimy przepisywać całe fragmenty programu, a mamy do dyspozycji powiedzmy 9 bajtów pamięci i nie można zmienić procka, a w dodatku program nie jest nasz tylko robimy poprawkę? Wtedy goto oszczędza czas, pieniądze i nerwy. :|



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: for (;;)
PostNapisane: 13 sie 2015, o 11:25 
Offline
Moderator
Avatar użytkownika

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

foxsiu napisał(a):
Wtedy goto oszczędza czas, pieniądze i nerwy.

Taka oszczędność czasu niestety - ZAWSZE się zemści ... tym bardziej, że jeszcze raz podkreślam - można to zrobić w C bez goto ... GOTO jest pułapką bo się wydaje, że tak będzie prościej a nie chce się już np dalej myśleć nad tym jak to zrobić inaczej

PANOWIE - proszę zakończyć opisywanie tu zalet GOTO - bo zalet nie ma - są właśnie nerwy i stracony czas i Quniec ;)

------------------------ [ Dodano po: kilkunastu sekundach ]

No i znowu mnie kolega mokrowski uprzedził .... też zauważył że co chwilę ktoś nowy chce wpaść i znajdować zalety goto ;)

------------------------ [ Dodano po: 2 minutach ]

foxsiu napisał(a):
Zgadzam się tym w całej rozciągłości


z tym panie kolego:

mokrowski napisał(a):
2. Co jest ważniejsze, czytelność programu, jego utrzymanie czy te 9 bajtów? W takim przypadku refaktoryzuj fragment tak aby te 9 bajtów oszczędzić a nie stosuj goto (to jest zasada). Nie zdarzyła mi się sytuacja by "goto poprawiło czytelność". Było wręcz odwrotnie.


Można się zgadzać w całej rozciągłości ...

_________________
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  
 Tytuł: Re: for (;;)
PostNapisane: 13 sie 2015, o 13:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2013
Posty: 568
Zbananowany użytkownik

Pomógł: 31

Taki mały workaround żaby nie używać goto, działa na PC. :lol:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Und schreien

Spring
Erlöse mich
Spring
...



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO