Udostępnij za pośrednictwem


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:

  1. Sekcja chroniona jest wykonywana.

  2. Program obsługi zakończenia jest wywoływany.

  3. 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

Zobacz też

Informacje

try-finally — instrukcja