Et bien en C console, c'est bien de faire des fonctions qui ne renvoient pas NULL a tout va mais des valeurs importantes.
Donc try, catch(exception_reconnues) pour les appels et throw dans les fonctions.
Ceci est construit grace à une pile qui gère les contextes imbriqués, et au header <setjmp> qui propose les exceptions en C.
Il suffit d'inserer le code dans des macros pour simuler try ect...
Un exemple dans le zip...
Source / Exemple :
// 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_
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.