C/Visual C - Cómo elimino la generación de Excepciones

 
Vista:

Cómo elimino la generación de Excepciones

Publicado por Javi (5 intervenciones) el 19/12/2003 21:47:55
Estoy realizando una aplicación y necesito que no se generen excepciones al dividir por cero, no puedo capturarlas con el "Try ... catch", simplemente no deben crearse. He leido que empleando la llamada _control87(MCW_EM,MCW_EM), lo conseguiría. El programa me compila correctamente, pero sí se genera la excepción.

¿Alguna idea? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cómo elimino la generación de Excepciones

Publicado por Josema (2 intervenciones) el 20/12/2003 14:20:42
El control de la excepciones es una herramienta fundamental para hacer software seguro y sin comportamientos extraños.

Si tu problema es la división por cero, deberías, antes de hacer la división, comprobar el valor del divisor y si no es cero, hacerla.

Tambien puedes hacer una captura de excepciones que no haga nada

try
{
c= a/b
}
catch (...)
{
;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cómo elimino la generación de Excepciones

Publicado por Javi (5 intervenciones) el 20/12/2003 22:34:19
Para mí la división por cero no es ningún problema, ya que el resultado es infinito y ese es el valor que necesito. El problema es que si mi programa lanza cualquier excepción se bloquea el entorno o da bastabtes problemas, me explico: En realidad estoy programando una función de MATLAB, sólo que la programo en C++ y la compilo en este entorno, obteniendo una función más rápida en la ejecución que los clásicos ficheros M (se llama Mex file). en MATLAB se pueden utilizar varios compiladores, pero el que yo utilizo (Borland C++ Compiler) no permite anular la emisión de excepciones.

Por lo tanto, el Try...Catch no me es válido, de ahí que busque otra alternativa.
Igual esto se sale un poco del foro de C, pero es que no es muy común la programación en C/C++ para MATLAB y no hay donde preguntar.

Gracias por tu interés.
Espero que podáis ayudarme.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cómo elimino la generación de Excepciones

Publicado por El Mogur (202 intervenciones) el 21/12/2003 01:45:32
Creo que lo que buscas es algo así:

_control87(MCW_EM,MCW_EM);

Y crear la funcion:

int _matherr(struct _exception *e)
{
e; // Dummy reference to catch the warning.
return 1; // Error has been handled.
}

Creo que tienes que incluir float.h

Ahora, esto no es ANSI C ni por asomo, claro.

Era algo que había que hacer cuando se usaba DirectX 6.0 con Borland, y ahí fue donde yo lo aprendí; supongo que con esto se arregla también lo tuyo.

Usando "San" Google...

Los "detalles" de por qué se necesitaba en DirectX:

http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dx81_c/directx_cpp/Graphics/ProgrammersGuide/Appendix/Tips/Troubleshooting.asp

Una explicación del _control87:

http://www.delorie.com/djgpp/doc/libc/libc_109.html

Espero que te sirva!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Muchas Gracias a Todos

Publicado por Javi (5 intervenciones) el 21/12/2003 13:01:10
Al poner la función _matherr se ha solucionado el problema.

Muchísimas gracias!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar