Pregunta

Quiero desactivar excepciones en mi Aplicación C ++, compilado bajo MSVC. Yo HVE cambié la opción Habilitar excepciones de C ++ en NO, pero me da advertencias que me dice que utilizar la opción / EHsc, lo que no quiero.


No tengo bloques try / catch en mi código, pero yo uso STL. He encontrado que el uso de _HAS_EXCEPTIONS definición macro = 0 debe desactivar las excepciones en STL, pero todavía estoy recibiendo advertencia como:


warning C4275: non dll-interface class 'stdext::exception' used as base for dll-interface class 'std::bad_typeid' see declaration of 'stdext::exception' see declaration of 'std::bad_typeid'


¿Hay alguna manera cómo apagar las excepciones se STL?

Nota: En mi código Quiero apagar las opciones de RTTI, también. Consigo las mismas advertencias no importa si el RTTI está encendido o apagado.

No hay solución correcta

Otros consejos

Microsoft STL soporta la desactivación excepción.

Para definir MSVC STL macro _HAS_EXCEPTIONS = 0 desactiva excepciones en caso de que enlazar la aplicación a LIBCMT.LIB / LIBCMTD.LIB (/ MT o la opción de compilador / MTD).

Si se enlaza con msvcrt.lib / MSVCRTD.LIB (/ MD o la opción de compilador / TDM) es necesario definir una más macro - _STATIC_CPPLIB. En este caso, o bien añadir las siguientes líneas antes de incluir cualquier código STL:

#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB

o añadir lo siguiente a las opciones del compilador:

-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB

Tenga en cuenta que es necesario deshabilitar excepciones de C ++ en la configuración del proyecto.

Es necesario utilizar un STL que soporta la desactivación excepción. Esto es generalmente una macro definición de tiempo de compilación.

Si no me equivoco, STLport ofrece esto con _STLP_USE_EXCEPTIONS = 0 y _STLP_NO_EXCEPTIONS. No sé cómo se comportan los programas con estos ajustes. ;)

Creo que hay algo de bandera oculta en el STL MS también.

El EASTL sale de la caja con excepciones desactivado:

http: //www.open- std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

El tipo id es que ver con la identificación del tipo de tiempo de ejecución. Es posible que desee para tratar de convertir RTTI fuera así.

Sin embargo, ciertas partes de la Biblioteca C ++ estándar se especifican para lanzar excepciones. Si desactivarlos usted está navegando en las aguas turbias de "comportamiento indefinido".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top