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
.