Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy zestawjmp i longjmp są używane razem, zapewniają one sposób na wykonanie pliku innego niż lokalny goto
. Są one zwykle używane w kodzie C do przekazywania kontroli wykonywania do obsługi błędów lub kodu odzyskiwania w wcześniej nazywanej rutynowej bez używania standardowych konwencji wywoływania lub zwracania.
Uwaga
Ponieważ setjmp
i longjmp
nie obsługują poprawnego zniszczenia obiektów ramek stosu przenośnie między kompilatorami języka C++, a ponieważ mogą one obniżyć wydajność, uniemożliwiając optymalizację zmiennych lokalnych, nie zalecamy ich używania w programach języka C++. Zalecamy użycie konstrukcji try
i catch
zamiast tego.
Jeśli zdecydujesz się używać funkcji setjmp
i longjmp
w programie C++, dołącz <również setjmp.h> lub <setjmpex.h> , aby zapewnić prawidłową interakcję między funkcjami a obsługą wyjątków strukturalnych (SEH) lub obsługą wyjątków języka C++.
Specyficzne dla firmy Microsoft
Jeśli używasz /EH opcji do skompilowania kodu C++, destruktory dla obiektów lokalnych są wywoływane podczas odwijania stosu. Jeśli jednak używasz /EHs lub /EHsc do skompilowania i jednej z funkcji, które używają wywołań longjmp
noexcept, destruktor odwijania dla tej funkcji może nie wystąpić, w zależności od stanu optymalizatora.
W kodzie przenośnym longjmp
, gdy jest wykonywane wywołanie, poprawne zniszczenie obiektów opartych na ramce nie jest jawnie gwarantowane przez standard i może nie być obsługiwane przez inne kompilatory. Aby poinformować setjmp
Cię o tym, na poziomie ostrzeżenia 4 wywołanie powoduje ostrzeżenie C4611: interakcja między "_setjmp" i zniszczeniem obiektów C++ nie jest przenośna.
END Microsoft Specific