Mezclar excepciones de C (estructuradas) y de C++
Si desea escribir código portable, no se recomienda utilizar el control de excepciones estructuradas (SEH) en un programa de C++. Sin embargo, puede que a veces desee compilar con /EHa
y mezclar excepciones estructuradas y código fuente de C++ estructurado, con lo que necesitará alguna capacidad para controlar ambos tipos de excepciones. Dado que un controlador de excepciones estructuradas no tiene el concepto de objetos ni de excepciones con tipo, no puede controlar las excepciones producidas por código de C++. Sin embargo, los controladores de C++ catch
pueden controlar excepciones estructuradas. La sintaxis de control de excepciones de C++ (try
, throw
, catch
) no es aceptada por el compilador de C, pero la sintaxis del control de excepciones estructuradas (__try
, __except
, __finally
) es admitida por el compilador de C++.
Consulte _set_se_translator
para obtener información sobre el control de excepciones estructuradas como excepciones de C++.
Si combina excepciones estructuradas y de C++, tenga en cuenta estos posibles problemas:
Las excepciones de C++ y las excepciones estructuradas no se pueden mezclar dentro de la misma función.
Los controladores de finalización (bloques
__finally
) se ejecutan siempre, incluso durante el desenredo después de producirse una excepción.El control de excepciones de C++ puede detectar y conservar la semántica de desenredo en todos los módulos compilados con las opciones del compilador
/EH
, que habilita la semántica de desenredo.Puede que haya situaciones en las que no se llame a las funciones de destructor para todos los objetos. Por ejemplo, se podría producir una excepción estructurada al intentar realizar una llamada de función a través de un puntero de función no inicializado. Si los parámetros de función son objetos construidos antes de la llamada, no se llama a los destructores de esos objetos durante el desenredado de la pila.
Pasos siguientes
Uso de
setjmp
olongjmp
en programas de C++Vea más información sobre el uso de
setjmp
ylongjmp
en programas de C++.Controlar excepciones estructuradas en C++
Vea ejemplos de las formas en que puede usar C++ para controlar las excepciones estructuradas.
Consulte también
Procedimientos recomendados de C++ moderno para las excepciones y el control de errores
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de