Сочетание блоков finally и except

Сочетание блоков finally и except

Один try-блок может иметь только один блок finally или только один блок except, но не может иметь оба указанных блока одновременно. Поэтому нижеприведенный код вызовет появление ошибок на стадии компиляции. 

__try {

 /* Блок контролируемого кода. */

} __except (filter_expression) {

 /* Блок обработчика исключений. */

} __finally {

 /* Так делать нельзя! Это приведет к ошибке на стадии компиляции. */

}

Вместе с тем, допускается вложение одного блока в другой, что используется довольно часто. Нижеприведенный код является вполне работоспособным и обеспечивает гарантированное удаление временных файлов при выходе из цикла под управлением программы или в результате возникновения исключения. Эта методика оказывается удобной и в тех случаях, когда требуется обеспечить гарантированную отмену блокирования файлов, что будет использовано в программе 4.2. Кроме того, в коде имеется внутренний блок try…except, размещенный в том месте программы, где выполняются вычисления, в которых участвуют вещественные числа.

 __try { /* Внешний блок try-except. */

  while (…) __try { /* Внутренний блок try-finally. */

   hFile = CreateFile(TempFile, …);

   if(…) __try { /* Внутренний блок try-except. */

    /* Разрешить FP-исключения. Выполнить вычисления. */

    …

   } __except(EXCEPTION_EXECUTE_HANDLER) {

    … /* Обработать FP-исключение. */

    _clearfp();

   }

   … /* Обработка исключений, не являющихся FP-исключениями. /*

  } __finally { /* Конец цикла while. */

   /* Выполняется на КАЖДОЙ итерации цикла. */

   CloseHandle(hFile);

   DeleteFile(TempFile);

  }

 } __except (filter-expression) {

 /* Обработчик исключений. */

}

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

4.7 ВЫДЕЛЕНИЕ ДИСКОВЫХ БЛОКОВ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

4.7 ВЫДЕЛЕНИЕ ДИСКОВЫХ БЛОКОВ Когда процесс записывает данные в файл, ядро должно выделять из файловой системы дисковые блоки под информационные блоки прямой адресации и иногда под блоки косвенной адресации. Суперблок файловой системы содержит массив, используемый для


Обзор компоновочных блоков

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Обзор компоновочных блоков Утилита Assembly Scout [Разведчик компоновочных блоков), доступная из меню View, предлагает обзор компоновочных блоков, на которые имеются ссылки в проекте. Это средство предлагает информацию в двух панелях, Левая панель предлагает дерево просмотра,


Блок finally

Из книги ArchiCAD 11 автора Днепров Александр Г


Роль компоновочных блоков .NET

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

Роль компоновочных блоков .NET Приложения .NET строятся путем связывания произвольного числа компоновочных блоков. С точки зрения упрощенного подхода компоновочный блок является двоичным файлом, включающим свое описание, снабженным номером версии и поддерживаемым средой


Создание текстовых блоков

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Создание текстовых блоков Для перехода в режим ввода и редактирования текста щелкните на кнопке Text (Текст) в разделе Document (Документ) палитры ToolBox (Палитра инструментов). Элементы управления этим инструментом появятся на палитре Info Box (Информационная палитра) (рис. 3.35). Рис.


Блок операторов finally

Из книги Программирование на языке Пролог для искусственного интеллекта автора Братко Иван

Блок операторов finally Существует еще одна конструкция, связанная с обработкой исключений:try //Операторы, которые могут привести к возникновению  //исключенияfinally //Операторы, которые выполняются при любых условиях end;Блок операторов после ключевого слова finally выполняется


Редактор блоков

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

Редактор блоков Редактор блоков вызывается командой BEDIT из падающего меню Tools ? Block Editor или щелчком кнопки мыши на пиктограмме Block Editor на стандартной панели инструментов. При этом сначала загружается диалоговое окно редактирования описания блока Edit Block Definition (рис. 10.6), в


2.6.3. Сочетание декларативного и процедурного подходов

Из книги AutoCAD 2009. Учебный курс автора Соколова Татьяна Юрьевна

2.6.3. Сочетание декларативного и процедурного подходов В предыдущем разделе было показано, что порядок целей и предложений имеет существенное значение. Более того, существуют программы, которые верны в декларативном смысле, но на практике не работают. Такое противоречие


Трансформация текстовых блоков

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

Трансформация текстовых блоков Мы можем применять к текстовым блокам те же трансформации, что и к другим фрагментам изображения. Делается это точно так же — выделяем нужный текстовый блок, выбираем в главном инструментарии инструмент "трансформатор" и перемещаем


Редактор блоков

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Редактор блоков Редактор блоков вызывается командой BEDIT из падающего меню Tools ? Block Editor или щелчком на пиктограмме Block Editor на стандартной панели инструментов. При этом сначала загружается диалоговое окно редактирования описания блока Edit Block Definition (рис. 10.17), в котором


Палитры вариаций блоков

Из книги Графология XXI века автора Щеголев Илья Владимирович

Палитры вариаций блоков Загрузка палитр вариаций блоков Block Authoring Palettes осуществляется из редактора блоков щелчком на инструменте Authoring Palettes. Палитры содержат следующие вкладки.Вкладка Parameters включает набор инструментов для определения параметров (рис. 10.20). Рис. 10.20.


Редактор блоков

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

Редактор блоков Редактор блоков вызывается командой BEDIT из падающего меню Tools ? Block Editor или щелчком на пиктограмме Block Editor на стандартной панели инструментов. При этом сначала загружается диалоговое окно редактирования описания блока Edit Block Definition (рис. 10.5), в котором


16.2. Перенаправление для блоков кода

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

16.2. Перенаправление для блоков кода Блоки кода, такие как циклы while, until и for, условный оператор if/then, так же могут смешиваться с перенаправлением stdin. Даже функции могут использовать эту форму перенаправления (см. Пример 22-7). Оператор перенаправления <, в таких случаях,


Сочетание сильного и слабого нажимов

Из книги автора

Сочетание сильного и слабого нажимов Известны случаи, когда сильный нажим сочетается с легким. Скорее всего, речь в таких случаях может идти о чувствительном человеке с бурным темпераментом. Такому человеку хочется, однако далеко не всегда удается контролировать себя,


Смещение блоков

Из книги автора

Смещение блоков Говорится, что элементу была присвоена позиция, если для свойства position устанавливается значение, отличное от static. Позиционированные элементы порождают позиционированные блоки, положение которых регулируется с помощью следующих четырех свойств.• top –


Оператор try ... finally

Из книги автора

Оператор try ... finally Оператор try ... finally имеет вид: try операторы finally операторы end; Операторы в блоке finally выполняются безотносительно к тому, возникло или нет исключение в блоке try. При этом само исключение не обрабатывается.Блок finally используется для возвращения ранее