para la anidación: un marco de pila de bloques try/catch actuales.
Su intento utilizará setjmp para guardarlo en un jmpbuffer (supongo). Si usted ha hecho un intento, y por lo tanto ahora está en el ámbito de un bloque try y pulsa otra oportunidad a continuación, desea preservar la jmpbuffer existente y crear uno nuevo - Push - y cuando la captura que son longjmp-ción de nuevo a el punto de la más reciente intento de ahí que el pop la última jmpbuffer. Así que creo un sentido marca modelo de pila de anidado try/catch.
Para la implementación, supongo que el enfoque más simple es reservar una variedad de jmpbuffers, por lo tanto, limitar la profundidad de captura de prueba, pero manteniéndolo simple; Push and Pop simplemente requiere que el seguimiento del índice en la matriz.
Para mensajes y otros contenidos de excepción, un área reservada para "currentException".
contenido de Excepción. Mantenlo simple, define una estructura de Excepción. Una matriz de caracteres y un int. Hacer que sea sencillo, pero no demasiado simple, reservar una gran variedad de ellos para que pueda soportar el encadenamiento.
Para un tiro que permiten
throw ("string", errcode)
que simplemente se pone a cero la estructura matriz y hace una entrada. Y
catch (exception)
Ahora puede mirar en la matriz y se encuentra en la primera entrada, y luego
throwChain ("string", errcode)
que añade la nueva excepción a la matriz (si hay espacio, y si no se puede mezclar la matriz según alguna regla como FIFO)
Pero, tengo que preguntar, ¿por qué no usar C++?
Estoy buscando una implementación avanzada, y sí, puedes implementarlas en C. Solo que la sintaxis no es sencilla. En cuanto a anidar y mensajes, también son posibles. Su respuesta no es realmente una respuesta, asumiendo que no he buscado en Google antes de publicar esto, y mucho menos tener unos días de pensar antes de esto, es pura puta de reputación. -1 – nubela
de pensamiento * (15 caracteres de restricción) – nubela
@Daniel Puede implementar todo en C, simplemente porque C es una especie de ensamblador portátil para que todo lo que pueda ejecutarse en la computadora pueda implementarse utilizando C. C carece de azúcar sintáctico para muchas cosas , como OOP y excepción, pero hay formas de evitarlo. Recuerde: el primer compilador de C++ (Cfront) producía código C simple. – qrdl