Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: И снова про исключения  (Прочитано 6386 раз)
0 Пользователей и 1 Гость смотрят эту тему.
oktonion
Постоялец

ru
Offline Offline

« : 09-11-2011 11:03 » 

Microsoft предлагает try {...} except {...}
http://msdn.microsoft.com/ru-ru/library/zazxh1a9.aspx
Цитата
try-except-statement:

    __try compound-statement

    __except ( expression ) compound-statement

The compound statement after the __try clause is the guarded section. The compound statement after the __except clause is the exception handler. The handler specifies a set of actions to be taken if an exception is raised during execution of the guarded section. Execution proceeds as follows:

    The guarded section is executed.

    If no exception occurs during execution of the guarded section, execution continues at the statement after the __except clause.

    If an exception occurs during execution of the guarded section or in any routine the guarded section calls, the__except expression is evaluated and the value returned determines how the exception is handled. There are three values:

    EXCEPTION_CONTINUE_SEARCH   Exception is not recognized. Continue to search up the stack for a handler, first for containing try-except statements, then for handlers with the next highest precedence.

    EXCEPTION_CONTINUE_EXECUTION   Exception is recognized but dismissed. Continue execution at the point where the exception occurred.

    EXCEPTION_EXECUTE_HANDLER   Exception is recognized. Transfer control to the exception handler by executing the __except compound statement, then continue execution at the point the exception occurred.

Но except, как я понял, не ловит все исключения а только
Цитата
The try-except statement is a Microsoft extension to the C language that enables applications to gain control of a program when events that normally terminate execution occur. Such events are called exceptions, and the mechanism that deals with exceptions is called structured exception handling.
потому как в блоке "защищенном" try\except у меня вылетает БСОД, хотя доолжен переходить к except, где исключение обрабатывается.
или я не прав?
Пробовал try {...} catch {...}, который по идее должен ловить все что можно.WDK ругается на catch
Код:
error C2061 : syntax error : identifier 'catch'
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-11-2011 11:32 » 

что ловится: Handling Exceptions
Цитата
Note that structured exception handling is distinct from C++ exceptions. The kernel does not support C++ exceptions.
« Последнее редактирование: 09-11-2011 11:50 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
oktonion
Постоялец

ru
Offline Offline

« Ответ #2 : 09-11-2011 12:25 » 

То есть некоторые исключения я не смогу обработать вообще? Например у меня в коде я пробую обращение к несуществующему элементу массива.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 09-11-2011 12:38 » 

а зачем вы в коде обращаетесь к несуществующему элементу массива?
Жжешь

реально это все бантики.
привыкайте писать без ошибок. если же ошибки возможны - вы должны их предусмотреть, не на уровне когда они уже появились а заранее.
« Последнее редактирование: 09-11-2011 12:43 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
oktonion
Постоялец

ru
Offline Offline

« Ответ #4 : 09-11-2011 12:50 » 

Ну, допустим, потому что я заранее не знаю сколько элементов в массиве.Меня интересует теоретическая сторона вопроса: я в принципе не смогу обработать такое исключение?

Я стараюсь, правда без брейк поинтов и пошагового прохождения кода сложно иногда отследить где именно возникают ошибки, а каждое исключение оборачивается БСОД'ом, что вообще неприятно. Жаль
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 09-11-2011 12:57 » 

в принципе не можете. как вы вообще это себе представляете?
если уж даже вы не знаете, где у вас массив кончается - то откуда процессору об этом узнать?

ЗЫ БСОДы пройдут) просто будьте внимательнее)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines