Für Verschachtelung: ein Stapel-Rahmen der aktuellen try/catch-Blöcke.
Ihr Versuch wird setjmp verwenden, um zu einem jmpbuffer (ich denke) zu speichern. Wenn Sie einen Versuch unternommen haben und nun in den Bereich eines try-Blockes kommen und einen anderen try versuchen, dann möchten Sie den vorhandenen jmpbuffer beibehalten und auch einen neuen erstellen - Push - und wenn Sie fangen, werden Sie lange zurückjagen der Punkt des letzten Versuches, damit du den neuesten jmpbuffer Pop. Ich denke also, dass ein stapelähnliches Modell für verschachtelte Versuche/Fänge sinnvoll ist.
Für die Implementierung, ich denke, die einfachste Vorgehensweise ist es, eine Reihe von Jmpbuffers zu reservieren, daher Ihre Fangtiefe begrenzen - aber es einfach zu halten; Push und Pop erfordern nur, dass Sie den Index in diesem Array verfolgen.
Für Nachrichten und andere Ausnahmeinhalte ein reservierter Bereich für "currentException".
Ausnahme Inhalt. Halten Sie es einfach, definieren Sie eine Exception-Struktur. Ein char-Array und ein int. Halten Sie es einfach, aber nicht zu einfach, reservieren Sie eine Reihe von ihnen, so dass Sie die Verkettung unterstützen können.
für einen Wurf erlauben Sie
throw ("string", errcode)
Welche einfach die Array-Struktur Nullen und macht einen Eintrag. Und
catch (exception)
kann nun in dem Array schauen und findet den ersten Eintrag und dann
throwChain ("string", errcode)
, die die neue Ausnahme zu dem Array hinzufügt (wenn es Raum ist, und wenn nicht, kann das Array mische nach einer Regel wie FIFO)
Aber ich muss fragen, warum nicht nur C++ verwenden?
Ich bin auf der Suche nach einer fortgeschrittenen Implementierung, und ja, Sie können sie tatsächlich in C implementieren. Nur, dass die Syntax nicht einfach ist. Auch für Verschachtelung und Nachrichten sind sie möglich. Ihre Antwort ist nicht wirklich eine Antwort, indem ich annehme, dass ich nicht gegoogelt habe, bevor ich das gepostet habe, geschweige denn, ein paar Tage davon vorher zu haben, ist nur bloßer Ruf, der hurtet. -1 – nubela
von Gedanken * (15 Zeichen Einschränkung) – nubela
@Daniel Sie können alles in C implementieren, nur weil C eine Art portabler Assembler ist, so dass alles, was auf dem Computer ausgeführt werden kann, mit C implementiert werden kann. C fehlt syntaktischer Zucker für viele Dinge , wie OOP und Ausnahme, aber es gibt Möglichkeiten, um es zu umgehen. Denken Sie daran - der erste C++ - Compiler (Cfront) produzierte reinen C-Code. – qrdl