#include "MLexception.h" #include #include DEFINE_EXCEPTION(e1); DEFINE_EXCEPTION(e2); DEFINE_EXCEPTION(e0); static void usage(char *com) { fprintf(stderr,"usage : %s\n",com); exit(EXIT_FAILURE); } static void f1(int i); static void f2(int i); static void f3(int i); int main(int argc, char*argv[]) { if(argc != 2) usage(argv[0]); f1(atoi(argv[1])); fprintf(stderr, "terminaison normale de main\n"); return EXIT_SUCCESS; } void f1(int i) { HANDLE_ANY(f2(i)) ON_NO_EXCEPTION {} ON_EXCEPTION(e1) fprintf(stderr,"exception e1 recuperee par f1 \n"); ON_ANY_OTHER RERAISE_IT; } void f2(int i) { HANDLE_ANY(f3(i)) ON_NO_EXCEPTION fprintf(stderr,"passage normal de f3 vers f2\n"); ON_EXCEPTION(e1) { fprintf(stderr,"exception e1 relancee par f2 \n"); RERAISE_IT; } ON_EXCEPTION(e2) fprintf(stderr,"exception e2 recuperee par f2 \n"); ON_ANY_OTHER RERAISE_IT ; } void f3(int i) { switch(i % 4) { case 0: RAISE(e0); case 1 : RAISE(e1); case 2 : RAISE(e2); default: ; } }