Поделиться через


попытк- за исключением выписки (c#)

Только для систем Microsoft

Try-except выписка расширения Майкрософт для языков c - язык, который позволяет приложениям на регулирование коэффициента усиления программы, когда события, которые обычно завершают выполнение.Такие события вызываются исключениями, и механизмом, с исключениями делам вызывают структурной обработкой ошибок.

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

Синтаксис

  • попытк-за исключением-выписка.
    __try составной оператор

    __except ( Выражение ) составной оператор

Составной оператор после __try предложение защищенный разделе.Составной оператор после __except предложение обработчик исключений.Обработчик задает набор действий для выполнения при возникновении исключения во время выполнения защищенного раздела.выполнение продолжает следующим образом:

  1. Защищенный раздел выполнен.

  2. Если исключение не возникло во время выполнения защищенного раздела, то выполнение продолжается после при выписке __except предложение.

  3. Если исключение возникло во время выполнения защищенного раздела или в любой процедуре, то вызывает защищенный раздел__except выражение вычисляется, и возвращаемое значение определяет, как исключение обработано.3 Значений:

    EXCEPTION_CONTINUE_SEARCH   Исключение не распознается.Продолжайте искать вверх по стеку для обработчика, сначала для хранения try-except выписки, затем для обработчиков следующим наиболее высоким приоритетом.

    EXCEPTION_CONTINUE_EXECUTION   Однако закрыто исключение.Продолжить выполнение в точке, где произошло исключение.

    EXCEPTION_EXECUTE_HANDLER   исключение.Управление передачи обработчику исключений, выполнив __except составной оператор, затем продолжает выполнение в точке произошло исключение.

Поскольку __except выражение вычисляется в качестве выражения c, оно ограничено одним значением " условного выражения или оператору запятой.Если значительный обработки, то выражение может вызывать процедуру, которая возвращает одно из 3 значений, перечисленных выше.

ПримечаниеПримечание

Структурная обработка исключений работает на основе исходных файлов c и C++.Однако она не предназначена для C++.Можно убедиться, что Код портативне с помощью обработки исключений C++.Кроме того, механизм обработки исключений C++ очень является более гибким, что он может обрабатывать исключения любого типа.

ПримечаниеПримечание

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

Каждая процедура в приложении может иметь собственный обработчик исключений.__except выражение выполняет в области __try текст сообщения.Это означает, что он имеет доступ к любым локальным переменным объявленным в ней.

__leave ключевое слово допустимо в течение a try-except блок выписки.Эффект __leave поскакать к концу try-except блок.Выполнение возобновляется после завершения обработки исключений.Хотя a goto выписку можно использовать для выполнения такого же результата, a goto выписка вызывает очистки стека.__leave выписка более эффективны, поскольку она не включает очистки стека.

Оставить a try-except выписка использование longjmp функция среды выполнения, считается анормалным нулем.Недопустимо поскакать в выражении __try выписка, но юридическая поскакать из них.Обработчик исключений не вызывается, если процесс убит в середине выполнения a try-except выписка.

Пример

Ниже приведен пример обработчика исключений и обработчика завершения.См. Оператор попытки-окончательн дополнительные сведения об обработчиках завершения.

.
.
.
puts("hello");
__try{
   puts("in try");
   __try{
      puts("in try");
      RAISE_AN_EXCEPTION();
   }__finally{
      puts("in finally");
   }
}__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){
   puts("in except");
}
puts("world");

Это выход из примера, если комментарий добавлен справа:

hello
in try              /* fall into try                     */
in try              /* fall into nested try                */
in filter           /* execute filter; returns 1 so accept  */
in finally          /* unwind nested finally                */
in except           /* transfer control to selected handler */
world               /* flow out of handler                  */

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Ссылки

попытк-за исключением выписки