try-finally, instrukcja (C)
Specyficzne dla firmy Microsoft
Instrukcja try-finally
to rozszerzenie firmy Microsoft do języka C, które umożliwia aplikacjom zagwarantowanie wykonania kodu oczyszczania w przypadku przerwania wykonywania bloku kodu. Oczyszczanie składa się z takich zadań jak cofnięcie przydziału pamięci, zamykanie plików i zwalnianie dojść do plików. Instrukcja try-finally
jest szczególnie przydatna w przypadku procedur, które mają kilka miejsc, w których jest wykonywane sprawdzanie pod kątem błędu, który może spowodować przedwczesny powrót z procedury.
try-finally-statement
:
__try
compound-statement
__finally
compound-statement
Instrukcja złożone po klauzuli __try
jest sekcją chronioną. Instrukcja compound po klauzuli __finally
jest procedurą obsługi zakończenia. Procedura obsługi określa zestaw akcji wykonywanych po zakończeniu chronionej sekcji. Nie ma znaczenia, czy chroniona sekcja jest zamykana przez wyjątek (nieprawidłowe zakończenie) lub przez standardowe przejście (normalne zakończenie).
Kontrolka osiąga instrukcję __try
przez proste sekwencyjne wykonanie (przechylić). Gdy kontrolka wprowadza instrukcję __try
, skojarzona z nią procedura obsługi staje się aktywna. Wykonanie jest kontynuowane w następujący sposób:
Sekcja chroniona jest wykonywana.
Wywoływana jest procedura obsługi zakończenia.
Po zakończeniu procedury obsługi zakończenia wykonywanie będzie kontynuowane po instrukcji
__finally
. Niezależnie od tego, jak kończy się chroniona sekcja (na przykład za pośrednictwemgoto
instrukcji poza chronioną treściąreturn
lub za pośrednictwem instrukcji), procedura obsługi zakończenia jest wykonywana przed przejściem przepływu sterowania z chronionej sekcji.
Słowo __leave
kluczowe jest prawidłowe w try-finally
bloku instrukcji. Efektem __leave
jest przejście na koniec try-finally
bloku. Procedura obsługi zakończenia jest natychmiast wykonywana. goto
Mimo że instrukcja może służyć do osiągnięcia tego samego wyniku, goto
instrukcja powoduje odwijanie stosu. Instrukcja __leave
jest wydajniejsza, ponieważ nie obejmuje odwijania stosu.
try-finally
Zakończenie instrukcji przy użyciu return
instrukcji lub longjmp
funkcji czasu wykonywania jest uznawane za nieprawidłowe zakończenie. To nie jest legalne, aby wskoczyć do __try
oświadczenia, ale prawo wyskoczyć z jednego. Wszystkie __finally
instrukcje, które są aktywne między punktem odlotu a miejscem docelowym, muszą być uruchamiane. Nazywa się to lokalnym unwind.
Procedura obsługi zakończenia nie jest wywoływana, jeśli proces zostanie zabity podczas wykonywania instrukcji try-finally
.
Uwaga
Obsługa wyjątków strukturalnych działa z plikami źródłowymi C i C++. Nie jest to jednak specjalnie zaprojektowane dla języka C++. W przypadku przenośnych programów języka C++ należy używać obsługi wyjątków w języku C++ zamiast obsługi wyjątków strukturalnych. Ponadto mechanizm obsługi wyjątków języka C++ jest znacznie bardziej elastyczny, ponieważ może obsługiwać wyjątki dowolnego typu. Aby uzyskać więcej informacji, zobacz Obsługa wyjątków w dokumentacji języka C++.
Zobacz przykład instrukcji , try-except
aby zobaczyć, jak try-finally
działa instrukcja.
KONIEC specyficzny dla firmy Microsoft