Partager via


setjmp

Enregistre l’état actuel du programme.

Syntaxe

int setjmp(
   jmp_buf env
);

Paramètres

env
Variable dans laquelle l’environnement est stocké.

Valeur retournée

Retourne la valeur 0 après l’enregistrement de l’environnement de pile. Si setjmp elle est retournée en raison d’un longjmp appel, elle retourne l’argument value de longjmp, ou si l’argument value de longjmp 0, setjmp retourne 1. Il n’existe aucun retour d’erreur.

Notes

La fonction setjmp enregistre un environnement de pile, que vous pouvez restaurer par la suite à l’aide de longjmp. Quand elles sont utilisées ensemble, les fonctions setjmp et longjmp offrent un moyen d’exécuter un goto non local. Ils sont généralement utilisés 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 normales d’appel ou de retour.

Un appel à setjmp enregistre l’environnement de pile actuel dans env. Un appel ultérieur à longjmp restaure l’environnement enregistré et redonne le contrôle au point situé de suite après l’appel setjmp correspondant. Toutes les variables (à l’exception des variables de Registre) accessibles à la routine recevant le contrôle contiennent les valeurs qu’elles possédaient au moment où longjmp a été appelé.

Il n’est pas possible d’utiliser setjmp pour passer du code natif au code managé.

Section spécifique à Microsoft

Dans le code Microsoft C++ sur Windows, longjmp utilise la même sémantique de déroulement de pile que le code de gestion des exceptions. Il est sûr d’utiliser dans les mêmes endroits que les exceptions C++ peuvent être déclenchées. Toutefois, cette utilisation n’est pas portable et est fournie avec quelques mises en garde importantes. Pour plus d’informations, consultez longjmp.

FIN de la section spécifique à Microsoft

Remarque

Dans le code C++ portable, vous ne pouvez pas supposer setjmp et longjmp prendre en charge la sémantique d’objet C++. Plus précisément, une paire d’appels a un setjmp/longjmp comportement non défini si elle remplace le setjmp et longjmp par catch et throw appelle tous les destructeurs non trivials pour tous les objets automatiques. Dans les programmes C++, nous vous recommandons d’utiliser le mécanisme de gestion des exceptions C++.

Pour plus d’informations, consultez Utilisation setjmp et longjmp.

Spécifications

Routine En-tête requis
setjmp <setjmp.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

Consultez l’exemple pour _fpreset.

Voir aussi

Processus et contrôle d’environnement
longjmp