L'autre solution, c'est avec des longjmp/setjmp: http://groups.di.unipi.it/~nids/docs/longjump_try_trow_catch.html
Par contre, c'est lent, et une énorme source du bug.
En fait ce sont surement les fonctions les plus dangereuses de C, et c'est presque tout le temps une mauvaise idée de les utiliser.
Comparer aux exceptions C++, un longjmp ne va pas appelle les free fait entre le setjmp et le longjmp, de plus laisse ton programme dans un état qui est beaucoup plus dur à contrôler, qui si le flow du programme est linaire.
Dalleur, que ça soit le mécanisme de defer ou __attribute__(cleanup) le comportement est indéfini, si un longjmp est fait après le defer/cleanup.
[^] # Re: goto return cave
Posté par uso (site web personnel) . En réponse au journal Is return the new goto ?. Évalué à 6.
L'autre solution, c'est avec des longjmp/setjmp:
http://groups.di.unipi.it/~nids/docs/longjump_try_trow_catch.html
Par contre, c'est lent, et une énorme source du bug.
En fait ce sont surement les fonctions les plus dangereuses de C, et c'est presque tout le temps une mauvaise idée de les utiliser.
Comparer aux exceptions C++, un longjmp ne va pas appelle les free fait entre le setjmp et le longjmp, de plus laisse ton programme dans un état qui est beaucoup plus dur à contrôler, qui si le flow du programme est linaire.
Dalleur, que ça soit le mécanisme de defer ou
__attribute__(cleanup)le comportement est indéfini, si un longjmp est fait après le defer/cleanup.