
Предварительная обработка исключений
Исключение обычно сигнализирует об ошибке. Мысль не всегда свидетельствуют о eror, он может также сигнал некоторые, особенно необычной, даже в вашей программе, которая заслуживает особого внимания.
Исключение и обработка ошибок
Нет-матер, как хорошо наша программа, это всегда должны быть в состоянии обрабатывать возможные ошибки. Большинство современных приложений содержат определенную форму обработки ошибок. К сожалению, уровень и качество обработки ошибок значительно варьируется. Некоторые приложения предоставляют столько обработки ошибок, что применение постоянно повышает тревоги, даже если пользователь дает правильный вход. Другие приложения обеспечивают обработку ошибок, что только разработчик может loveâ € "сообщения полны жаргона и данных имеет смысл только если вы разработали приложение. Тем не менее другие приложения предоставляют один-размер-подходит-всем обработки ошибок, что просто сообщает пользователю, ошибка произошла не сказав, что ошибки не было или как это исправить.
Обработка исключений
Одной из основных функций в C + + является обработка исключительных ситуаций, которые лучше думать о и обработки ошибок. При обработке исключений выполняются следующие условия:
- Обработки ошибок не столь утомительно писать, и она не стала смешивать с "нормальной" кода. Вы пишете код, который вы хотите, чтобы произошло, а позже в отдельном разделе вы пишете код, чтобы справиться с проблемами. Если вы сделаете несколько вызовов функции, то обрабатывать ошибки из этой функции один раз, в одном месте.
- Ошибки не может быть проигнорировано. Если функция должна отправить сообщение об ошибке, вызвавшей эту функцию, так ли? Бросает? объект, представляющий эту ошибку, выходим из функции. Если звонящий оленья кожа? Т? Поймать? ошибки и обработать его, он переходит на следующий вмещающих динамические возможности, и так далее, пока либо ошибки или поймали программа завершает работу из-за отсутствия обработчика поймать такого рода исключением.
В статье рассматриваются C? Ы подход к обработке ошибок (таких, как она есть), обсуждается, почему он не работает и для C, и объясняет, почему он получил? Т работе на всех на C + +. В этой главе также охватывает попробовать, бросать и ловить, C + + ключевые слова, которые поддерживают обработку исключений.
Обработка ошибок в C
В большинстве примеров, приведенных в этих томов, мы используем утверждать (), поскольку он предназначен: для отладки во время разработки с кодом, который может быть отключена с # определить NDEBUG для отгрузки продукции. Runtime ошибок использует require.h функций (обеспечение () и требуют ()), разработанные в главе 9 в томе 1. Эти функции являются удобным способом сказать? Там? Сб проблема здесь ты? LL, вероятно, хотите управлять с несколько более сложного кода, но вы не? Т должны быть отвлечены в этом примере?. Require.h функций может быть достаточно для небольших программ, но и для сложных продуктов вам придется писать более сложные обработки ошибок.
Ошибка обработки достаточно проста в ситуациях, когда вы точно знаете, что делать, потому что у вас есть вся необходимая информация в этом контексте. Конечно, вы просто обработать ошибку в этой точке.
Проблема возникает, когда вы надеваете? Т располагает достаточной информацией в этой связи, и вам нужно передать информацию об ошибке в другом контексте, где эта информация не существует. В C, вы можете справиться с этой ситуацией с использованием трех подходов:
- Вернуться сведения об ошибке из функции или, если возвращаемое значение не могут быть использованы таким образом, установить флаг глобального условие ошибки. (Стандарт C обеспечивает ошибка и реггог (), чтобы поддержать это.) Как упоминалось ранее, программист может игнорировать ошибку информации, потому что скучно и обфускации ошибок должно произойти с каждым вызовом функции. Кроме того, возвращаясь с функцией, которая наносит исключительных условиях, возможно, не имеет смысла.
- Использование малоизвестных Стандартная библиотека C сигнал системы обработки, реализованных с использованием сигнала () функции (определить, что происходит, когда данное событие происходит) и повышения () (для создания события). Опять же, этот подход предполагает высокие связи, поскольку она требует от пользователя какой-либо библиотеки, который генерирует сигналы для понимания и установить соответствующий сигнал механизм обработки; также в крупных проектах номера сигналов из разных библиотек могут столкнуться.
- Использование функций нелокальных перейти в библиотеку стандартных C: setjmp () и longjmp (). С setjmp (), вы сохраните известных в хорошем состоянии в программе, и, если попадешь в беду, longjmp () вернет этого государства. Опять же, существует высокая степень связи между местом, где состояние сохраняется и место, где произошла ошибка.
При рассмотрении обработки ошибок схемы с C + +, там? С дополнительными очень серьезной проблемой: C методов сигналов и setjmp () / longjmp () не вызывать деструкторы, поэтому объекты не открываются должным образом очищены. (В самом деле, если longjmp () скачков прошлого конец сферы, где деструкторы следует называть, поведение программы не определено.) Это делает практически невозможным для эффективного восстановления от исключительных условий, потому что вы? Всегда будете оставлять объекты, расположенные за , что убежище? т были очищены, и что больше не может быть доступно. Следующий пример демонстрирует это с setjmp / longjmp:
/ / Setjmp () и longjmp () # Включить <iostream> # Включить <csetjmp> патезрасе зЬй; класса Радуга ( общественности: Радуга () (соиЬ <<"Радуга ()" <<епсИ;) ~ Радуга () (суд <<"~ Радуга ()" <<епсИ;) ); jmp_buf Канзас; недействительным унций () ( Радуга РБ; для (INT = 0; я <3; я + +) суд <<"нет места, как дома \ п"; longjmp (штат Канзас, 47); ) п () ( если (setjmp (штат Канзас) == 0) ( суд <<"Торнадо", ведьма, манчкинов ... \ п "; унций (); ) (Другое суд <<"тетя Эм"! <<"У меня было странное сон ..." <<ЕпсИ; ) ///:~)
Страницы: [Page - 1] [Page - 2] [Page - 3] [Page - 4] [Page - 5] [Page - 6] [Page - 7]
Тэги: программирования C , C + + исключения , программирования C + + , поймать , класса , ошибка , исключение , программирование , попробуйте
Ну как, понравилось?
Станьте одним из завсегдатаев, подписавшись! Вы будете первым, чтобы знать, когда мы добавляем большие посты, как это. Присоединяйтесь либо RSS-каналы или Email обновления уже сегодня!
Есть нет комментариев на этот пост. Вы можете следить за любыми ответы на эту запись через RSS 2,0 корм . Вы можете пропустить до конца и оставить ответ или TrackBack с вашего собственного сайта.


































