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 cofanie 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 złożone po klauzuli jest procedurą __finally 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 wykonanie sekwencyjne (fall through). 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 kończenia.

  3. Po zakończeniu 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 z chronionej treści lub za pośrednictwem return instrukcji), procedura obsługi zakończenia jest wykonywana przed wyjściem przepływu sterowania z chronionej sekcji.

Słowo __leave kluczowe jest prawidłowe w bloku try-finally instrukcji. Efektem __leave jest przejście na koniec try-finally bloku. Procedura obsługi zakończenia jest wykonywana natychmiast. goto Mimo że instrukcja może służyć do osiągnięcia tego samego wyniku, goto instrukcja powoduje odwijanie stosu. Instrukcja jest bardziej wydajna __leave , 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 prawne, aby wyskoczyć z jednego. Wszystkie __finally instrukcje, które są aktywne między punktem odlotu a miejscem docelowym, muszą być uruchamiane. Jest to nazywane lokalnym odwijanym wiatrem.

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 ona jednak specjalnie zaprojektowana dla języka C++. W przypadku przenośnych programów C++ należy używać obsługi wyjątków 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 .

END specyficzne dla firmy Microsoft

Zobacz też

try-finally instrukcja (C++)