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:
Sekcja chroniona jest wykonywana.
Wywoływana jest procedura obsługi kończenia.
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średnictwemgoto
instrukcji z chronionej treści lub za pośrednictwemreturn
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ż
Opinia
https://aka.ms/ContentUserFeedback.
Już wkrótce: w ciągu 2024 r. będziemy stopniowo usuwać problemy z usługą GitHub jako mechanizm opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla