2009-11-22 8 views

Respuesta

2

Bueno, realmente no se puede poner en práctica excepciones en C, ya que no son compatibles con el lenguaje. Lo mejor que puede hacer es emular usando setjmp y longjmp y algunas macros diabólicamente inteligentes.

Una búsqueda rápida se convierte estos enlaces que pueden ser de utilidad:

+0

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

+0

de pensamiento * (15 caracteres de restricción) – nubela

+0

@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

3

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++?

+0

Interesante, ¿te importa elaborar? Actualmente estoy explorando la implementación de un compilador de juguetes en C. Así que sí. – nubela

+0

Agregaré un poco más, pero solo estoy inventando esto por el momento :-( – djna

+0

Por favor, sí, sí :) – nubela

4

de Dave Hanson ya se ha hecho un really nice package of exception macros como parte de su excelente libro C Interfaces and Implementations. Puede usar el código al por mayor o aprender de sus técnicas. Para cualquiera que haga una buena cantidad de programación en C, el libro vale la pena comprar —, cambiará la forma en que cambia la programación de C  , y le mostrará cómo hacer un diseño orientado a objetos en   C.

Cuestiones relacionadas