try-finally — instrukcja (C)
Specyficzne dla firmy Microsoft
Instrukcja try-finally jest rozszerzeniem języka C firmy Microsoft, które umożliwia aplikacjom gwarancję wykonania kodu czyszczenia, gdy wykonywanie bloku kodu zostanie przerwane.Czyszczenie składa się z takich zadań, jak cofanie przydziału pamięci, zamykanie plików i zwalnianie dojść do plików.Instrukcja try-finally jest szczególnie przydatna dla procedur, które mają kilka miejsc, gdzie należy sprawdzić czy nie pojawił się błąd, który może spowodować przedwczesny powrót z procedury.
try-finally-statement:
__try compound-statement__finally compound-statement
Złożone instrukcje po klauzuli __try to sekcja chroniona.Złożone instrukcje po klauzuli __finally to obsługa zakończenia.Obsługa zakończenia określa zestaw akcji, które zostaną wykonane, gdy nastąpi wyjście z sekcji chronionej, niezależnie od tego, czy wyjście z niej nastąpiło z powodu wyjątku (zakończenie nienormalne) czy przez standardowe przejście (zakończenie normalne).
Sterowanie osiąga instrukcję __try przez proste wykonywanie sekwencyjne (przejście).Gdy sterowanie wchodzi do instrukcji __try, skojarzona obsługa zakończenia staje się aktywna.Wykonanie działa w następujący sposób:
Sekcja chroniona jest wykonywana.
Program obsługi zakończenia jest wywoływany.
Po zakończeniu obsługi zakończenia, wykonywanie jest kontynuowane po instrukcji __finally.Niezależnie od tego, w jaki sposób zakończona zostanie sekcja chroniona (na przykład przez wyjście z chronionej treści za pomocą instrukcji goto lub za pomocą instrukcji return), program obsługi zakończenia zostanie wykonany zanim przepływ sterowania wyjdzie z sekcji chronionej.
Słowo kluczowe __leave jest prawidłowe w bloku instrukcji try-finally.Efektem działania instrukcji __leave jest skok na koniec bloku try-finally.Program obsługi zakończenia jest wykonywany natychmiast.Chociaż instrukcja goto może być używana do osiągnięcia tego samego wyniku, instrukcja goto powoduje rozwijanie stosu.Instrukcja __leave jest bardziej efektywna, ponieważ nie wymaga rozwijania stosu.
Wychodzenie z instrukcji try-finally przy użyciu instrukcji return lub funkcji czasu wykonywania longjmp jest uważane za zakończenie nienormalne.Skok do instrukcji __try jest niedozwolony, ale dozwolony jest skok na zewnątrz takiej instrukcji.Wszystkie instrukcje __finally, które są aktywne między punktem wejścia i docelowym, muszą być uruchomione.Jest to nazywane "lokalnym rozwinięciem".
Program obsługi zakończenia nie jest wywoływany, jeśli proces został zabity w trakcie wykonywania instrukcji try-finally.
[!UWAGA]
Obsługa wyjątków strukturalnych działa z plikami źródłowymi języków C i C++.Jednakże, nie została szczególnie zaprojektowana dla języka C++.Możesz zapewnić większą przenośność kodu przy użyciu obsługi wyjątków języka C++.Ponadto, mechanizm obsługi wyjątków języka C++ jest dużo bardziej elastyczny, pod tym względem, że może obsługiwać wyjątki dowolnego typu.
[!UWAGA]
Dla programów napisanych w języku C++, obsługa wyjątków języka C++ powinna być używana zamiast obsługi wyjątków strukturalnych.Aby uzyskać więcej informacji, zobacz Obsługa wyjątków w Informacje dotyczące języka C++.
Zobacz przykład instrukcji try-except, aby zobaczyć jak działa instrukcja try-finally.
KONIEC informacji specyficznych dla firmy Microsoft