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



Teraz jest 29 lis 2024, o 05:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 26 lis 2014, o 01:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

Witam

Chciałem zaprezentować ciekawe makra ułatwiające pisanie w C (w niektórych przypadkach).

Otóż osoby które Delphi Pascal mają odbite na opuszkach palców pamiętają jak przydatna była możliwość stosowania tzw sekcji (TRY) kodu w której to wyjście z procedury czy jakikolwiek wyjątek powodował przeskok do sekcji między FINALLY . tu kod kończący END . Najlepiej to na przykładzie procedurki pokazać o mi chodzi :

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


Jak widać coś co procedurka ma wykonać musi być zamknięte we ustawionej fladze cośuse, czyli tzw atomowy kod? :)
Później okazuje się że trzeba sprawdzić arg i jeśli zero to koniec procedury - normalnie powinno się cośuse-- jeszcze przed return zrobić, po to by zmienić flage zajętości. Ale z pomocą makr następuje skok do sekcji FINALLY .. END tam się zdejmuje flage i pod END mamy dopiero prawdziwy return 1;

...a to te makra :

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


Dosyć proste :) a jakie zgrabne i do tego upraszcza kod.

Oczywiście można tu jeszcze wiele dopisać, bo nie są odporne te makra na stosowanie TRY w TRY , można sobie zrobić coś w stylu wyjątków EXCEPT i takie tam . . .

Pozdrawiam
XBary



Ostatnio edytowano 30 lis 2014, o 01:30 przez xbary, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2014, o 21:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

OO :) wreszcie Xbary się zdecydowałeś coś pokazać :)

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2014, o 23:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

źle napisałem że atomowe :)
ale ten przykład procedury to miał być tylko przykładem i nic więcej ... zamiast cośuse++ powiedzmy że damy CLI(); a tam gdzie cośuse-- dajemy SEI(); , wtedy cokolwiek i gdziekolwiek wyjdziemy z procedury RETURN(rezultat); zawsze odbędzie się skok do finally gdzie jest SEI();.
W prostych krótkich procedurkach to taki przerost można by rzec, ale takie procedurki na kilka stron kodu gdzie w wielu miejscach jest natychmiastowy return :) warto by zawsze odbył się skok do sekcji sprzątającej FINALLY ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2014, o 23:25 
Offline
Moderator
Avatar użytkownika

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

tzn jeśli miałoby to służyć tylko jako taka "ala atomowość" czyli żeby przywrócić sei() .... to powiem, że jest to niebiezpieczna konstrukcja w C. Tzn inaczej - owszem wygląda to na ukłon w stronę Delfiarzy i ja rozumiem idealnie co to jest try finally w Delphi no ale tam używa się tego głównie w związku z możliwością łatwego opanowania WYJĄTKÓW. Tutaj w ogóle nie ma mowy o wyjątkach - a więc główny cel znika. To raczej taka troszkę hmmm no właśnie (nie chodzi mi broń boże o pseudo krytykę bo zaraz powiem dobre słowo o tym) ... ale to raczej taka trochę PROTEZA dla Delfiarzy ... bo programując w C wydaje się być to w ogóle niepotrzebne .... W delphi nie mamy możliwości postawienia w dowolnym miejscu funkcji/procedury rozkazu RETURN prawda ? i to boli. W C mamy taką możliwość więc pozostałe ew uroki tej konstrukcji moim zdaniem topnieją totalnie ... Ale przyznam że jak zaczynałem C to sam starałem się tworzyć sobie na własny użytek różne protezy mające mi upodobnić C do Delphi żeby było łatwiej ;) ..... dzisiaj ? .... dzisiaj to ja staram się swoje programy w Delphi upodobnić do tych w C/C++ tyle że nie mam aż tyle wygodnych i elastycznych możliwości ....

Bo jak się już przstawić całkiem na myślenie w C szczególnie C++ - a jest ono dobre - to zanika potrzeba tworzenia protez ....

Ale teraz na koniec. Proszę nie traktuj Bary tego jako czepianie się - bo też może być tak, że ja jeszcze czegoś nie dostrzegam w możliwościach tej twojej konstrukcji w programowaniu w C na AVR - po prostu ciężko mi się już przestawić ;)

No i dobre słowo - jak się popatrzy na makra - chociaż właśnie takie hmmm no nieco straszne to widać, że nieźle żeś się nakombinował i nagłówkował - to zawsze coś i pozwala inaczej spojrzeć .... Zawsze lubię analizować takie osobliwości czy może inaczej różne ciekawe podejścia bo nawet gdy czasem nie wydają potrzebne na pierwszy rzut oka - to gdzieś tam siedzą w tyle głowy i w odpowiednim momencie się mogą przydać.

_________________
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  
PostNapisane: 27 lis 2014, o 23:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

Heh :) przykład z przerwaniami do bani :)
to dla przykładu przykład :) który tuż za TRY rezerwuje sobie troszkę pamięci, a w sekcji FINALLY robimy IF czy wskaźnik na zarezerwowaną pamięć jest różny od zera, jeśli tak to zwalniamy ją :) , czyli w FINALLY sprzątamy .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2014, o 23:29 
Offline
Moderator
Avatar użytkownika

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

xbary napisał(a):
to dla przykładu przykład który tuż za TRY rezerwuje sobie troszkę pamięci, a w sekcji FINALLY robimy IF czy wskaźnik na zarezerwowaną pamięć jest różny od zera, jeśli tak to zwalniamy ją , czyli w FINALLY sprzątamy .

TAK - to już hmmm fajny przykład - o ile korzystamy z dynamicznej alokacji pamię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  
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 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