per la nidificazione: uno stack-frame di blocchi try/catch attuali.
Il tuo tentativo userà setjmp per salvare su un jmpbuffer (credo). Se hai fatto una prova, e quindi sei ora nel campo di applicazione di un blocco try e fai un altro tentativo, allora vuoi preservare il jmpbuffer esistente e anche crearne uno nuovo - Push - e quando vieni catturato stai riprendendo a il punto della prova più recente da qui ti piace l'ultimo jmpbuffer. Quindi penso che un modello tipo stack abbia senso per try/catch annidati.
Per l'implementazione, suppongo che il più semplice apporach sia quello di riservare un array di jmpbuffer, limitando quindi la profondità del try-catch, ma mantenendolo semplice; Push e Pop richiedono semplicemente di tenere traccia dell'indice in quella matrice.
Per i messaggi e altri contenuti di eccezione, un'area riservata per "currentException".
Contenuto eccezione. Mantengalo semplice, definisca una struttura di eccezione. Un array di caratteri e un int. Mantenendolo semplice, ma non troppo semplice, riservane una serie in modo da poter supportare il concatenamento.
per una rimessa si consente
throw ("string", errcode)
Quali azzera semplicemente la struttura a matrice e fa una voce. E
catch (exception)
Ora può guardare nella matrice e trova la prima voce, e poi
throwChain ("string", errcode)
che aggiunge la nuova eccezione alla matrice (se c'è spazio, e se non può mescolare l'array secondo alcune regole come FIFO)
Ma, devo chiedere, perché non usare solo C++?
Sto cercando un'implementazione avanzata e sì è possibile implementarle in C. Solo che la sintassi non è semplice. Per quanto riguarda nidificazione e messaggi, sono anche possibili. La tua risposta non è davvero una risposta, assumendo che non ho cercato su Google prima di postare questo, per non parlare di avere qualche giorno prima di questo, è solo pura reputazione prostituta. -1 – nubela
di pensiero * (limitazione di 15 caratteri) – nubela
@Daniel È possibile implementare tutto in C, solo perché C è una sorta di assemblatore portatile in modo che tutto ciò che può essere eseguito sul computer possa essere implementato utilizzando C. C manca di zucchero sintattico per molte cose , come OOP ed eccezione, ma ci sono modi per aggirarlo. Ricorda: il primo compilatore C++ (Cfront) produceva codice C semplice. – qrdl