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

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

Виды исключений

Компилятор Microsoft C++ (MSVC) поддерживает три типа обработки исключений:

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

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

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

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

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

    С версии 3.0 MFC использовал исключения C++. Он по-прежнему поддерживает более старые макросы обработки исключений, которые похожи на исключения C++ в форме. Рекомендации по сочетанию макросов MFC и исключений C++ см. в разделе "Исключения: использование макросов MFC и исключений C++".

Используйте параметр компилятора /EH, чтобы указать модель обработки исключений, используемую в проекте C++. Стандартная обработка исключений C++ (/EHsc) — это значение по умолчанию в новых проектах C++ в Visual Studio.

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

В этом разделе

См. также

Справочник по
языку C++ по обработке
исключений x64 (C++/CLI и C++/CX)