13.4 Выводы

Предыдущая  Содержание  Следующая V*D*V

Современные языки программирования, подобные Eiffel или C++, поддерживают специальный синтаксис для обработки исключений. Прежде чем предпринять опасное действие устанавливается обработчик исключений. Во время опасного действия исключение могут породить программное обеспечение или аппаратные средства (прерывания, сигналы) и таким образом запустить выполнение обработчика исключений. Теоретически, после завершения обработчика исключений есть три варианта: завершение обоих, обработчика исключений и опасного действия; возобновление опасного действия сразу после точки, где было порождено исключение; или повтор той части опасного действия, которое породило исключение.

На практике наиболее вероятный выбор — завершение, и это может быть единственным выбором, который поддерживает язык программирования. Однако, язык обязательно должен поддерживать вложение областей, где обработчик исключений является эффективным, и должна быть возможность объединить обработку исключений в цепочку, то есть когда один обработчик исключений завершается, должна быть возможность вызвать следующий внешний обработчик.

Обработка исключений с завершением может быть легко реализована в ANSI-C с помощью setjmp(). Обработчики исключений могут быть вложены через помещение в стек информации jmp_buf, настраиваемой setjmp() и используемой longjmp(). Стеком значений jmp_buf можно управлять как объектами класса Exception. Объекты создаются для вложения обработчиков исключений и они должны удаляться в противоположном порядке. Объект исключения снаряжается с помощью catch(), которая вернёт во второй раз ненулевой код исключения. Исключение порождается вызовом cause() с кодом исключения, который должен быть передан в catch() для новейшего объекта исключения.

 

Предыдущая  Содержание  Следующая