visual try studio sintaxis practicas personalizadas para manejo excepciones ejemplo configuracion catch buenas activar visual-c++ exception-handling

visual c++ - try - ¿Cómo puedo desactivar el manejo de excepciones en MSVC?



sintaxis para el manejo de excepciones en c# (6)

¿Todavía tienes try / catch block (s) en tu código?

Lo primero que debe hacer cuando se bloquea es buscar el error en MSDN y / o Google. Eso usualmente ayuda. Esto es lo que dice MSDN:

Cuando la opción / EHsc no se ha habilitado, un objeto con almacenamiento automático en el marco, entre la función que realiza el lanzamiento y la función que atrapa el tiro, no se destruirá. Sin embargo, se destruirá un objeto con almacenamiento automático creado en un bloque try o catch. [...]

¿Alguien sabe cómo desactivar la opción de manejo de excepciones en MSVC? Traté de configurar la opción ''Habilitar excepciones de C ++'' a ''NO'' y recibí una advertencia: advertencia C4530: controlador de excepciones de C ++ utilizado, pero la semántica de desenrollado no está habilitada. Especificar /EHsc .

Me gustaría desactivar el manejador de excepciones, también, pero no sé cómo.

En mi aplicación, básicamente necesito más velocidad que estabilidad, por lo tanto, elegí desconectar el manejo de excepciones. No tengo ningún bloque try / catch , pero uso STL. Cuando cambio la opción ''Habilitar excepciones de C ++'' a ''NO'', ¿hay alguna forma de deshacerse de esas advertencias?


Desactivar excepciones es bastante difícil, ya que se trata de C ++ aquí. Realmente está en la misma categoría que desactivar los punteros NULL. ¿Cómo va a manejar la falla de asignación de memoria, por ejemplo?

Dicho esto, / EH especifica qué modelo de manejo de excepciones desea, y "ninguno" no es una opción. Puede elegir / EHa, / EHs, / EHac y / EHsc - [a] sincrónicos con o sin soporte para lanzar funciones externas "C".


Esa advertencia significa que le dijo al compilador que no va a usar excepciones pero tiene un bloque try {} catch() {} en el código. Le informa que aunque tenga ese bloque, si se lanza una excepción, no se ejecutarán descductores. Desactivar excepciones significa exactamente eso: el compilador no produce código para la destrucción automática cuando la pila se desenrolla en el caso de una excepción.


Lo más probable es que incluya uno o más encabezados estándar de C ++ que contengan try / catch. El caso más típico sería <iostream> : obtendrá este error en un archivo que consta de una sola línea que solo incluye eso. Cualquier otro encabezado de flujo también funcionará, al igual que las configuraciones regionales.

Si observa detenidamente el mensaje de error, debe hacer referencia a dos nombres de archivo, no uno: su archivo y el archivo incluido con el error. Por ejemplo, en mi caso de muestra de #include <iostream> , obtengo esto:

except.cpp C:/Program Files/Microsoft Visual Studio 9.0/VC/INCLUDE/xlocale(342) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc


Si realmente no desea excepciones en el STL, defina _HAS_EXCEPTIONS = 0 en todo su proyecto. Es mejor que compilar su código con / EHsc si no planea agregar el manejo de excepciones.