Partager via


Utilisation de setjmp/longjmp

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

Avertissement

Toutefois, étant donné que setjmp et longjmp ne prennent pas en charge la sémantique d'objet C++, et qu'ils peuvent diminuer les performances en empêchant l'optimisation sur les variables locales, nous vous recommandons de ne pas les utiliser dans les programmes C++.Il est recommandé de les utiliser à la place des constructions try/catch.

Si vous décidez d'utiliser setjmp/longjmp dans un programme C++, incluez également SETJMP.H ou SETJMPEX.H pour assurer une bonne interaction entre les fonctions et la gestion des exceptions C++. Si vous utilisez /EH pour compiler, les destructeurs des objets locaux sont appelés durant le désempilage. Si vous utilisez /EHs pour compiler, et l'une de vos fonctions appelle une fonction qui utilise nothrow et la fonction qui utilise longjmp appelle nothrow, le déroulement du destructeur risque de ne pas se produire, selon l'optimiseur.

Dans le code portable, lorsqu'un goto non local qui appelle longjmp est exécuté, la destruction correcte des objets basés sur des trames peut s'avérer peu fiable.

Voir aussi

Référence

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