2009-11-22 4 views

Antwort

2

Nun, Sie können nicht wirklich implementieren Ausnahmen in C, da sie nicht von der Sprache unterstützt werden. Das Beste, was Sie tun können, ist emulieren sie mit setjmp und longjmp und einige teuflisch clevere Makros.

Eine schnelle Suche wendet diese Links an, die Ihnen nützlich sein können:

+0

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

+0

von Gedanken * (15 Zeichen Einschränkung) – nubela

+0

@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

3

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?

+0

Interessant, sorgfältig zu erarbeiten? Ich erforsche eigentlich, um einen Spielzeug-Compiler in C zu implementieren. Also yeap. – nubela

+0

Ich füge ein bisschen mehr hinzu, aber ich mache das nur spontan :-( – djna

+0

Bitte tu ty :) – nubela

4

Dave Hanson hat bereits einen really nice package of exception macros als Teil seines ausgezeichneten Buches C Interfaces and Implementations getan. Sie können entweder den Code Großhandel verwenden oder von seinen Techniken lernen. Für jeden, der eine ordentliche Menge an C-Programmierung macht, ist das Buch den Kauf wert — es wird die Art ändern, wie Sie über C   Programmierung ändern, und es wird Ihnen zeigen, wie objektorientiertes Design in   C.

Verwandte Themen