Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C/C++] Obsługa setjmp/longjmp w C++

Ostatnio zmodyfikowano 2014-12-09 20:43
Autor Wiadomość
amilkwes
Temat założony przez niniejszego użytkownika
[C/C++] Obsługa setjmp/longjmp w C++
» 2014-12-08 22:23:59
Oczywiście, chciałbym unikać w ogóle używania setjmp/longjmp w C++ jednakże, nie zawszę mogę to zrobić.

Często w projektach używam bibliotek napisanych w C i zdarza się, że wykorzystują one setjmp/longjmp. Zastanawiam się jak w bezpieczny sposób wyseparować ten mechanizm w C++?
P-122558
pekfos
» 2014-12-09 18:05:01
Jeśli skoki zamykają się w obrębie implementacji jednego wywołania funkcji bibliotecznej (tj skok nie 'leci' przez twój kod), to afaik to już jest wystarczające odseparowanie. Ewentualne odwijanie stosu, mając po drodze wywołania C++, może już powodować niezdefiniowane zachowanie - np w przypadku obiektów na stosie o nietrywialnych destruktorach, tablic VLA (to nawet w przypadku C), itp.
P-122591
amilkwes
Temat założony przez niniejszego użytkownika
» 2014-12-09 20:43:26
Tak, tego jestem świadom, że skok nie może lecieć przez kod, który "robi coś w tle". Jednak jestem ciekaw czy nie istnieje jakiś wzorzec albo po prostu koncepcja na opakowanie tego w jakiś mechanizm, który robił by to skutecznie i elegancko, ew. pozwalał konwertować to do wyjątków.

Biblioteki z języka C często w ten sposób zwracają informację o błędzie, więc nie jest to wewnętrzna implementacja a interfejs dla użytkownika. Oczywiście w trakcie korzystania z biblioteki potrzebne są obiekty z nietrywailnymi destruktorami. Ciężko zapewnić brak ich obecności i nie potrafię wypracować sobie jednolitej obsługi tego i narazie obsługuję to z doskoku.
P-122598
« 1 »
  Strona 1 z 1