Сочетание исключений C (структурированных) и C++
Если вы хотите написать переносимый код, не рекомендуется использовать структурированную обработку исключений (SEH) в программе C++. Однако иногда может потребоваться компиляция с использованием /EHa
структурированных исключений и исходного кода C++ и требуется некоторое средство для обработки обоих видов исключений. Так как структурированный обработчик исключений не имеет понятия объектов или типизированных исключений, он не может обрабатывать исключения, создаваемые кодом C++. Однако обработчики C++ catch
могут обрабатывать структурированные исключения. Синтаксис обработки исключений C++ (try
, throw
, catch
) не принимается компилятором C, но структурированный синтаксис обработки исключений (__try
, __except
, __finally
) поддерживается компилятором C++.
Дополнительные _set_se_translator
сведения об обработке структурированных исключений в виде исключений C++.
Если вы смешиваете структурированные и C++ исключения, обратите внимание на следующие потенциальные проблемы:
Исключения C++ и структурированные исключения не могут быть смешанными в одной функции.
Обработчики завершения (
__finally
блоки) всегда выполняются, даже во время очистки после возникновения исключения.Обработка исключений C++ может перехватывать и сохранять семантику очистки во всех модулях, скомпилированных с
/EH
параметрами компилятора, которые обеспечивают семантику очистки.В некоторых ситуациях функции деструктора не вызываются для всех объектов. Например, структурированное исключение может возникать при попытке выполнить вызов функции с помощью неинициализированного указателя функции. Если параметры функции являются объектами, созданными перед вызовом, деструкторы этих объектов не вызываются во время очистки стека.
Следующие шаги
Использование или
longjmp
использованиеsetjmp
программ C++Дополнительные сведения об использовании
setjmp
иlongjmp
использовании программ C++.Обработка структурированных исключений в C++
См. примеры способов обработки структурированных исключений с помощью C++ .
См. также
Современные рекомендации по C++ по исключению и обработке ошибок
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по