5/5 (2 avis)
Vue 14 164 fois - Téléchargée 438 fois
// je mets juste la spécification ici #ifndef _C_EXCEPTION_H_ #define _C_EXCEPTION_H_ #include <setjmp.h> // Exceptions reconnues #define NO_EXCEPTION 0 // Code sans erreur #define ARRAY_EXCEPTION 99 // Erreur de tableau #define DIVZERO_EXCEPTION 100 // Erreur de division par 0 #define OVERFLOW_EXCEPTION 101 // Erreur d'overflow // Pile de contexte typedef struct contextException { jmp_buf context; struct contextException* head; }Exception; extern Exception* g_exceptions; // Prototypes void push_exception(void); void pop_exception(int); // Macros simulant try, catch, throw #define Try { \ int exc; \ push_exception(); \ exc = setjmp(g_exceptions->context); \ switch(exc) { \ case NO_EXCEPTION: #define Catch(X) \ break; \ case (X): \ exc = 0; #define EndTry \ break; \ default: \ pop_exception(exc); } \ } #define Throw(X) longjmp(g_exceptions->context, X) #endif//_C_EXCEPTION_H_
10 nov. 2006 à 16:22
Sans setjmp(), pas de longjmp().
10 nov. 2006 à 15:28
ça n'empêche pas de les employer certes, mais ça les cache.
je n'ai pas compris à quoi servait le setjmp ?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.