[c] exception en c (simuler try, catch, throw)

Description

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_

Codes Sources

A voir également

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.