Cтраница 3
Проблема обработки исключений рассматриваемым способом состоит в том, что блок catch не получает информацию о причинах возникновения конкретного исключения, так как ему не передается параметр. [31]
При обработке исключений программа прежде, чем выполнить деление, проверяет знаменатель и генерирует ( возбуждает или выбрасывает, как говорят иногда в описаниях C) исключение, если знаменатель равен нулю. [32]
При обработке исключения во внешнем блоке будет выдано окно сообщений, показанное ранее в разд. [33]
При этом обработка первоначального исключения не будет завершена. [34]
Новые возможности обработки исключений в C, вероятно, будут широко использоваться в результате усилий по стандартизации C со стороны ANSI. Такая стандартизация особенно важна в больших проектах по созданию программного обеспечения, в которых десятки или даже сотни людей работают над проектированием отдельных компонентов системы и эти компоненты должны быть эффективно объединены в единую полную систему и при этом правильно функционировать. [35]
Интересным аспектом обработки исключений является то, что компилятор не будет рассматривать как ошибку компиляции случай, когда функция содержит выражение throw для исключения, не перечисленного в спецификации исключений данной функции. Функция должна попытаться сгенерировать такое исключение во время выполнения прежде, чем эта ошибка будет перехвачена. [36]
Избегайте использовать обработку исключений для целей, отличных от обработки ошибок, потому что это может уменьшить ясность программы. [37]
Как видите, обработка исключений на уровне приложения достаточно сложна, поэтому лучше не заниматься этим до тех пор, пока вы не будете абсолютно уверены в своих действиях. [38]
Кратко сформулируем особенности обработки исключений. [39]
Стиль и детали обработки исключений, представленные в этой главе, основаны на работе Эндрю Кенига ( Andrew Koenig) и Бьерна Страуструпа ( Bjarne Stroustrup), изложеной в их статье Exception Handling for C ( revised), изданной в трудах Конференции Proceedings of the USENIX C Conference, проведенной в Сан-Франциско в апреле 1990 года. Их работа формулирует основы, которые, вероятно, станут вариантом стандарта ANSI по обработке исключений. [40]
Существуют два типа обработки исключений. [41]
Для включения механизма обработки исключений выбирается опция Enable Exception Handling в конфигурации проекта. При создании нового проекта этот режим для обеих конфигураций задается по умолчанию. [42]
Этот код не производит обработки исключения; он лишь делает программу надежной в случае возникновения исключения. [43]
Если в программе применяется обработка исключений, то ее отладка может несколько усложниться. Каждый раз, когда формируется исключение, отладчик приостанавливает выполнение программы на блоке catch, как если бы в этой строке была установлена контрольная точка. Если блок catch находится в вашем коде, будет выведена точка выполнения, как и при обычной остановке в контрольной точке. [44]
В заключение описания синтаксиса обработки исключений надо отметить, что в раздел except могут включаться или только операторы on, или только какие-то другие операторы. Смешение операторов on с другими не допускается. Впрочем, возможен еще один вариант: не включать в раздел except никаких операторов. [45]