¿Alguien sabe cómo apagar el manejo de excepciones opción en MSVC? He intentado configurar la opción ‘Habilitar las excepciones de C++’ a ‘NO’ y me puso la advertencia:
advertencia C4530: C++ excepción controlador utilizado, pero relajarse semántica no están habilitados. Especificar /EHsc
.
Me gustaría desactivar el controlador de excepción, también, pero no sé cómo.
En mi aplicación que básicamente necesita más velocidad que la estabilidad, por lo tanto elegí apagar el manejo de excepciones. Yo no tengo ninguna try
/catch
bloques, pero hago uso de la STL. Cuando me cambie la opción ‘Habilitar las excepciones de C++’ a ‘NO’ es allí cualquier manera de cómo deshacerse de esas advertencias?
Más probable es que usted está incluyendo uno o más encabezados estándar de C++ que contienen 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 se incluye el de que. Cualquier otra secuencia de cabecera también va a hacer, como locales.Si te fijas en el mensaje de error, se debe hacer referencia a dos nombres de archivo, no el archivo, y el archivo incluido con el error. E. g. en mi caso de ejemplo de
#include <iostream>
, me sale esto:Si usted realmente no quiere excepciones en la STL que estará vinculado a su programa, definir
_HAS_EXCEPTIONS=0
en toda su proyecto. Mejor que compilar el código con/EHsc
si usted no planea en la adición de manejo de excepciones.Que la advertencia de que significa que usted dijo que el compilador no vas a usar excepciones sin embargo, usted tiene un
try {} catch() {}
bloque en el código. Se le informa de que, aunque tienes que bloquear, si se produce una excepción no desctructors se van a ejecutar. Giro excepciones off significa exactamente eso – el compilador no produce código para la destrucción automática cuando la pila se desenvuelve en el caso de las excepciones.De la desconexión de las excepciones es bastante difícil, ya que usted está tratando con C++ aquí. Es realmente en la misma categoría que la conmutación de los punteros NULL – ¿cómo vas a manejar error de asignación de memoria, por ejemplo?
Que dijo, /EH especifica que modelo de control de excepciones que usted desea, y «ninguno» no es una opción. Usted puede escoger /EHa, /EHs /EHac y /EHsc – [a]ynchronous con o sin apoyo para lanzar extern «C» funciones.
En Visual Studio,
/EH
se encuentra en las Propiedades de Configuración ➔ C/C++ ➔ Generación de Código ➔ Activar las Excepciones de C++.¿Todavía tiene un bloque try/catch(s) en el código?
La primera cosa a hacer cuando te quedas atascado es buscar el error en MSDN y/o de Google. Que por lo general ayuda. Esto es lo que MSDN dice: