Udostępnij za pośrednictwem


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:

  1. Sekcja chroniona jest wykonywana.

  2. Wywoływana jest procedura obsługi zakończenia.

  3. 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średnictwem goto 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

Zobacz też

try-finally instrukcja (C++)