MANEJO DE EXCEPCIONES EN C C Se intenta
- Slides: 11
MANEJO DE EXCEPCIONES EN C++
C++ • Se intenta ejecutar un bloque de código • Se produce la circunstancia excepcional • Se desvía la ejecución del programa a un sitio especifico
try { // bloque de código que se intenta. . . if (condición) throw ¨……. . ¨ ; . . . } catch (. . . ) { // bloque manejador de posibles excepciones. . . }. . . // continua la ejecución normal
Ejemplo: # include <stdio. h> bool pass; class Out{ }; void festival (bool); int main( ) { try { pass = true; festival (true); } catch(Out o) { pass = false; } return pass ? (puts("Acierto!"), 0) : (puts("Fallo!"), 1); } void festival (bool firsttime){ if (firsttime) throw Out( ); } Salida: Fallo!
Secuencia normal del bloque-intento (Try-block) A: Se produce una circunstancia excepcional: Se lanza la excepción señalada por la sentencia throw El programa busca por un manejador ("handler") adecuado a la excepción • Se encuentra el ¨handler¨ : La pila (stack) es recorrida hacia abajo hasta el punto donde está el manejador. El control del programa es transferido al manejador.
Secuencia normal del bloque-intento (Try-block) • No se encuentra ningún manejador: Se invoca la función terminate(): o Se ha establecido una función t_func por defecto con set_terminate(). programa). terminate invoca t_func (que debe terminar el o No se ha establecido ninguna función por defecto con set_terminate() terminate invoca la función abort(). B: No se produce ninguna excepcion: El programa sigue su ejecución normal (saltándose los bloques catch que pudieran seguir).
#include <except. h> #include <process. h> #include <stdio. h> bool pass; class Out{}; void final(); void festival(bool); void test(); int main() { set_terminate(final); test(); return pass ? (puts("Salir del test"), 0) : (puts("Seguir el test"), 1); } void final(){ puts("*** Nadie captura la excepción ***"); abort(); } void festival (bool firsttime) { if (firsttime) throw Out(); } void test () { festival(true); }
Manejador de excepciones (“handler”) try {. . . } // bloque-intento // posibles errores catch (Tipo. X x) { // capturar errores X. . . } catch (Tipo. Y y) { // capturar errores Y. . . }. . . // sigue aquí
El manejador universal: • catch (. . . ) { <sentencias> }
#include <stdio. h> bool pass; class Out{}; void festival(bool firsttime) { if(firsttime) throw Out(); } void test() try { festival(true); } catch(. . . ){ pass = true; } // puede capturar cualquier excepción } int main() { // ========= pass = false; test(); return pass ? (puts("Excepción capturada"), 0) : (puts("no hay excepción") , 1); }
• Aunque es factible lanzar cualquier tipo de excepción, la librería estandar de C++ ofrece unas clases para este propósito: Exception Logic error Bad exception Bad alloc Bad cast Bad typeid Runtime error Out of range Domain error Length error Invalid argument Range error Overflow error Underflow error
- Soluciones teologicas
- Conocimiento intuitivo
- La validacion es un proceso metodologico que intenta
- Excepciones
- Tipos de excepciones java
- Excepciones
- Palabras agudas con excepciones
- 4 afirmaciones
- Excepciones verbos copulativos
- Excepciones procesales
- Cifras significativas en sumas y restas
- Manejo antiisquemico iam