@michal_zukowski,
post #37
Jak nie musisz to nie korzystaj z setjumpów.
Oczywiście, że ta konstrukcja nie powinna być nadużywana (tak jak wyjątki w ogóle), tylko w przypadku gdy czeka nas np. dużo alokacji i chcemy ładnie posprzątać w razie wystąpienia błędu. Fajne jest to, że możemy przywrócić program do działania nawet po jakimś błędzie kiedy nie można użyć funkcji exit(), bo błąd nie jest krytyczny.
Ogólnie ta konstrukcja się przydaje gdy mamy kod z masą sytuacji, gdzie może wystąpić błąd. Ja preferuję, gdy funkcja sprząta po sobie w sytuacji błędnej. Zwykle wymaga to wielu zagnieżdżeń kodu warunkowego albo użycie właśnie setjmp()/longjmp().
Tu jest wyjasnione jak zrobicz trykacza:
http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html
Spojrzałem na ten kod. Moim zdaniem nadawanie nazw "try" i "catch" za pomocą #define tylko komplikuje kod. Jest to nieco sztuczne rozwiązanie, ja preferuję użycie zwyczajnych nazw z języka C setjmp() i longjmp() przy czym longjmp() może być umieszczony w jakieś funkcji nazwanej np. error(), albo w obsłudze sygnału.
Ostatnia aktualizacja: 04.02.2015 10:14:06 przez Hexmage960