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


Обработка исключений в Visual C++

Исключение — это условие ошибки, возможно вне элемента управления программы, которое не позволяет продолжать выполнение программы по обычному пути выполнения. Некоторые операции, включая создание объектов, ввод-вывод файлов и вызовы функций из других модулей, — это возможные источники исключений, даже если программа выполняется правильно. В надежном коде можно предвидеть и обработать исключения.

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

Visual C++ поддерживает три типа обработки исключений.

  • Обработка исключений С++

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

  • Структурированная обработка исключений

    Windows предоставляет собственный механизм исключений — SEH. Его не рекомендуется использовать при программировании C++ или MFC. Используйте SEH только в программах, написанных на языке С без использования MFC.

  • Исключения MFC

    Начиная с версии 3.0, MFC использует исключения C++, но по-прежнему поддерживает более старые макросы обработки исключений, которые по форме схожи с исключениями C++. Хотя эти макросы не рекомендуется использовать в новом программировании, они по-прежнему поддерживаются для обеспечения обратной совместимости. В программах, в которых уже используются макросы, можно также свободно использовать исключения C++. Во время предварительной обработки макросы вычисляются как ключевые слова обработки исключений, определенные в реализации Visual C++ языка C++, начиная с версии Visual C++ 2.0. Начиная работать с исключениями C++, разработчик может оставить существующие макросы исключений.

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

Дополнительные сведения об обработке исключений в приложениях CLR см. в разделе Обработка ошибок в /clr.

Дополнительные сведения об обработке исключений в процессорах x64 см. в разделе Обработка исключений (x64).

См. также

Другие ресурсы

Справочник по языку C++