c++ - siemens - ¿Puedo deshabilitar excepciones en AWL?
que significa awl (3)
El ID de tipo tiene que ver con la identificación de tipo de tiempo de ejecución. Es posible que desee intentar desactivar RTTI también.
Sin embargo, ciertas partes de la Biblioteca Estándar de C ++ están especificadas para lanzar excepciones. Si los deshabilitas estás navegando hacia las turbias aguas de "comportamiento indefinido".
Quiero desactivar excepciones en mi aplicación C ++, compilada bajo MSVC. He cambiado la opción Habilitar excepciones de C ++ a NO, pero recibo advertencias para que use la opción / Ehsc, que no quiero.
No tengo bloques try / catch en mi código, pero uso STL. He descubierto que el uso de la definición de macro _HAS_EXCEPTIONS = 0 debería deshabilitar las excepciones en AWL, pero sigo recibiendo una 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 de cómo desactivar las excepciones es STL?
Nota: en mi código también quiero desactivar las opciones de RTTI. Recibo las mismas advertencias sin importar si el RTTI está encendido o apagado.
Necesita usar un STL que admita la desactivación de excepciones. En general, esta es una definición de macro en tiempo de compilación.
A menos que me equivoque, STLPort ofrece esto con _STLP_USE_EXCEPTIONS = 0 y _STLP_NO_EXCEPTIONS. No sé cómo se comportan los programas con estas configuraciones. ;)
Creo que hay alguna bandera oculta en el MS STL también.
El EASTL sale de la caja con excepciones deshabilitadas:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html
Microsoft STL admite la desactivación de excepciones.
Para MSVC STL que define la macro _HAS_EXCEPTIONS = 0 deshabilita las excepciones en caso de que vincule su aplicación con libcmt.lib / libcmtd.lib (/ MT o / MTd compilador).
Si enlaza con msvcrt.lib / msvcrtd.lib (/ opción de compilador MD / / MDd) necesita definir una macro más - _STATIC_CPPLIB. En este caso, agregue las siguientes líneas antes de incluir cualquier código STL:
#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB
o agregue lo siguiente a las opciones del compilador:
-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB
Tenga en cuenta que debe deshabilitar las excepciones de C ++ en la configuración de su proyecto.