• [^] # Re: goto return cave

    Posté par (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.