Programación General > Visual C++
Compilador Y Seh
diego.martinez:
Buenas:
Me he creado una macro, que dependiendo de si se define un define mio, cambia la forma en la que se reciben las excepciones:
--- Código: Text --- #ifdef DEBUG_APP_ERROR #define _APP_TRY __try #define _APP_CATCH(m) __except (ExpFilter(m,GetExceptionInformation(), GetExceptionCode(),__LINE__,__FUNCTION__)){}#else #define _APP_TRY try #define _APP_CATCH(m) catch(...) {}#endif
despues lo uso en un cacho de codigo:
--- Código: Text --- #define DEBUG_APP_ERRORwhile (!app->IsFinished()) { _APP_TRY { app->Init (); app->Main (); app->End (); } _APP_CATCH("Bucle Principal"); }
Bueno, el caso es que cuando lo compilo, me dice :
Cannot use __try in functions that require object unwinding Cannot use __try in functions that require object unwinding
He buscado en Google y la causa es que no compilaba con /GX- para deshabilitar las SEH y usar try/catch de c (corregidme si me equivoco).
La cosa ahora es que con esa opcion, cuando compilo, el compilador me saca otro warning si uso el "using namespace STD".
warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
Bueno, pues son Incompatibles uno con el otro /Gx- override /EHsc , si quito /Gx- me dice que no puede hacerlo y si lo pongo me dice que no tiene el unwind...
¿Que estoy haciendo mal?
¿Puedo ignorar el warning?
¿Me estoy liando y realmente no entendi bien?
Gracias por adelantado y disculpad el tamaño del post.
Danielo:
:think: en algunos compiladores (como el de CygWin) el iostream.h ha quedado obsoleto, y hay que utilizar iostream (sin el .h)
--- Código: Text ---#include <iostream>
A lo mejor con eso desaparece el warning de "using namespace STD".
Eternal Idol:
Si, son incompatibles, SEH esta pensado para C y no es parte del lenguaje (ni de C ni de C++) sino que es la forma de capturar excepciones en Windows, por eso te da warning cuando usas objetos.
diego.martinez:
gracias por la respuesta.
lo tenia como #include <iostream>
por que el iostream.h ni lo encuentra
asi que ningun cambio por ahi.
los warning todos aparecen en iostream.h y en ostream.h
uso Visual Studio .Net 2003 por si se os ocurre si es alguna cosa propia del compilador.
diego.martinez:
vaya, justo estaba respondiendole a Danielo cuando ha respondido EternalIdol.
Entonces, es un buen lio, por que tengo parte de codigo usando try/catch de c y otra parte de SEH...
Tendria que limpiarlo todo , entonces la pregunta es...
si es una aplicacion windows es mejor usar SEH por los ExceptionHandlers o es mejor __try/__catch?.
Si en un mismo obj no se mezclan los 2 modelos (Se conmutan con el Define); puede la aplicacion convivir con modulos SEH y otros con try de c o es peligroso?
gracias por las respuestas.
Navegación
[#] Página Siguiente
Ir a la versión completa