Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Ошибки и исключения



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

С другой стороны, исключение может возникнуть почти в любом месте, и провер­ку на исключение сделать невозможно или неудобно. Примеры — деление на нуль и нарушения доступа к памяти.

Тем не менее различие между ошибками и исключениями иногда стирается. Win32 может генерировать исключения в ходе резервирования памяти функциями НеарАllос и HeapCreate, если объема памяти недостаточно. Программы также могут вызывать собственные исключения с определенными программи­стом кодами с помощью функции RaiseException.

Обработчики исключений позволяют выходить из внутренних блоков или функций по логике программы, не прибегая для передачи управления к goto или longjmp. Эта возможность особенно ценна, если блок кода обращается к таким ресурсам, как от­крытые файлы, память или объекты синхронизации, так как обработчик может осво­бодить их; кроме того, можно продолжить выполнение программы после обработчика исключения, не завершая ее. Также программа может восстанавливать при выходе из блока состояние системы.

Генерируемые пользователем исключения

С помощью функции RaiseException можно вызвать исключение в любой точке в ходе выполнения программы. Таким образом программа сможет обнаружить ошибку и обработать ее как исключение.

VOID RaiseException (DWORD dwExceptionCode,

DWORD dwExceptionFlags, DWORD cArguments, LPDWORD lArguments)

Параметры

dwExceptionCode — код, определяемый пользователем. Не используйте бит 28, который зарезервирован для системы. Код ошибки устанавливается в битах 27-0 (т.е. во всех, кроме самой старшей шестнадцатеричной цифры). Бит 29 устанавливается для обозначения "заказного" исключения (не Microsoft). Биты 31—30 указывают строгость исключения. Ниже показано, как это делается, причем начальная шестнадцатеричная цифра кода показана для случая, когда бит 29 установлен.

• 0 — успех (начальная цифра 2).

• 1 — информационный (начальная цифра 6).

• 2 — предупреждение (начальная цифра А).

• 3 — ошибка (начальная цифра Е).

Параметр dwExceptionFIags обычно устанавливается в 0, но установка значения в EXCEPTION_NONCONTINUABLE указывает, что выражение фильтра не должно генерировать EXCEPTION_CONTINUE_EXECUTION; если это будет так, произойдет немедлен­ное исключение EXCEPTION_NONCONTINUABLE.

Параметр lpArguments, если не имеет значения NULL, указывает на массив разме­ра cArguments (третий параметр), содержащий 32-разрядные значения, которые будут переданы в выражение фильтра. Максимально допустимое количество параметров EXCEPTION_MAXIMUM_PARAMETERS в настоящее время равно 15. Обращаться к этой структуре следует через GetExceptionInformation.





Дата публикования: 2015-11-01; Прочитано: 364 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...