Partager via


Utilisation de setjmp et longjmp

Lorsque setjmp et longjmp sont utilisés ensemble, ils fournissent un moyen d’exécuter un paramètre non local goto. Ils sont généralement utilisés dans le code C pour passer le contrôle d’exécution à la gestion des erreurs ou code de récupération dans une routine appelée précédemment sans utiliser les conventions d’appel standard ou de retour.

Attention

Étant donné que setjmp et longjmp ne prennent pas en charge la destruction correcte des objets frame de pile portablement entre les compilateurs C++, et parce qu’ils peuvent dégrader les performances en empêchant l’optimisation sur les variables locales, nous ne recommandons pas leur utilisation dans les programmes C++. Nous vous recommandons d’utiliser try et catch de construire à la place.

Si vous décidez d’utiliser setjmp et longjmp dans un programme C++, incluez <également setjmp.h> ou <setjmpex.h> pour garantir une interaction correcte entre les fonctions et la gestion des exceptions structurées (SEH) ou C++.

Section spécifique à Microsoft

Si vous utilisez une option /EH pour compiler du code C++, les destructeurs pour les objets locaux sont appelés pendant le déroulement de la pile. Toutefois, si vous utilisez /EHs ou /EHsc pour compiler, et l’une de vos fonctions qui utilise des appels longjmpnoexcept, le déstructeur se déroule pour cette fonction peut ne pas se produire, en fonction de l’état de l’optimiseur.

Dans le code portable, lorsqu’un appel est exécuté, la longjmp destruction correcte des objets basés sur des images n’est pas garantie explicitement par la norme et peut ne pas être prise en charge par d’autres compilateurs. Pour vous informer, au niveau d’avertissement 4, un appel à setjmp l’avertissement C4611 : l’interaction entre « _setjmp » et la destruction d’objets C++ n’est pas portable.

FIN de la section spécifique à Microsoft

Voir aussi

Mélange d’exceptions C (structurées) et d’exceptions C++