Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Корпорация Майкрософт
Инструкция try-finally — это расширение Майкрософт на языке C, которое позволяет приложениям гарантировать выполнение кода очистки при прерывании выполнения блока кода. Очистка состоит из таких задач, как освобождение памяти, закрытие файлов и освобождение дескрипторов файлов. Оператор try-finally особенно полезен для подпрограмм, которые имеют несколько мест, где выполняется проверка на ошибку, которая может привести к преждевременному возвращению из подпрограммы.
try-finally-statement:
__trycompound-statement__finallycompound-statement
Составной оператор после __try предложения является защищенным разделом. Составной оператор после __finally предложения является обработчиком завершения. Обработчик задает набор действий, выполняемых при выходе защищенного раздела. Не имеет значения, завершается ли защищенный раздел исключением (ненормальным завершением) или стандартным падением (обычное завершение).
Элемент управления достигает инструкции по простому __try последовательному выполнению (падение). Когда элемент управления вводит инструкцию, связанный __try обработчик становится активным. Выполнение выполняется следующим образом:
Выполняется защищенный раздел.
Вызывается обработчик завершения.
После завершения обработчика завершения выполнение продолжается после инструкции
__finally. Независимо от того, как заканчивается защищенный раздел (например, с помощью инструкции из защищенного тела или с помощьюgotoreturnинструкции), обработчик завершения выполняется перед перемещением потока управления из защищенного раздела.
Ключевое __leave слово допустимо в блоке инструкций try-finally . Эффект __leave заключается в переходе к концу try-finally блока. Обработчик завершения немедленно выполняется. Несмотря на goto то, что оператор может использоваться для выполнения одного и того же результата, goto оператор вызывает очистку стека. Оператор __leave более эффективен, так как он не включает очистку стека.
Выход try-finally из инструкции с помощью return инструкции или longjmp функции времени выполнения считается ненормальным завершением. Это не законно прыгать в __try заявление, но юридически выскочить из одного. Все __finally операторы, активные между точкой отъезда и назначением, должны выполняться. Она называется локальной очисткой.
Обработчик завершения не вызывается, если при выполнении try-finally инструкции выполняется процесс.
Замечание
Структурированная обработка исключений работает с исходными файлами C и C++. Однако он не предназначен специально для C++. Для переносимых программ C++ следует использовать обработку исключений C++ вместо структурированной обработки исключений. Кроме того, механизм обработки исключений C++ гораздо более гибкий, так как он может обрабатывать исключения любого типа. Дополнительные сведения см. в разделе " Обработка исключений " в справочнике по языку C++.
См. пример инструкцииtry-except, чтобы узнать, как try-finally работает инструкция.
END Microsoft-specific