Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Restaure l’environnement de pile et les paramètres régionaux d’exécution définis par un setjmp appel.
Syntaxe
void longjmp(
jmp_buf env,
int value
);
Paramètres
env
Variable dans laquelle l’environnement est stocké.
value
Valeur à retourner à l’appel setjmp.
Notes
La fonction longjmp restaure un environnement de pile et des paramètres régionaux d’exécution enregistrés dans env par setjmp. setjmpet longjmp fournissent un moyen d’exécuter un non local goto; 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 précédemment appelée sans utiliser les conventions normales d’appel et de retour.
Quand setjmp est appelé, l’environnement de pile actuel est enregistré dans env. Un appel ultérieur à longjmp restaure l’environnement enregistré et retourne le contrôle au point qui suit immédiatement l’appel setjmp correspondant. L’exécution reprend comme si value elle avait été retournée par l’appel setjmp . Les valeurs de toutes les variables (sauf les variables de Registre) qui sont accessibles à la routine qui reçoit le contrôle contiennent les valeurs qu’elles avaient quand longjmp a été appelé. Les valeurs des variables de Registre sont imprévisibles. La valeur retournée par setjmp doit être différente de zéro. Si value elle est passée sous la forme 0, la valeur 1 est remplacée dans le retour réel.
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.
longjmp Appelez uniquement avant la fonction qui a appelé setjmp les retours ; sinon, les résultats sont imprévisibles.
Respectez les restrictions suivantes quand vous utilisez longjmp :
Ne partez pas du principe que les valeurs des variables de registre restent identiques. Les valeurs des variables de Registre dans la routine qui appelle
setjmppeuvent ne pas être restaurées aux valeurs appropriées après l’exécution delongjmp.N’utilisez
longjmppas pour transférer le contrôle hors d’une routine de gestion des interruptions, sauf si l’interruption est due à une exception à virgule flottante. Dans ce cas, un programme peut retourner à partir d’un gestionnaire d’interruption par le biais delongjmps’il réinitialise tout d’abord le package mathématique à virgule flottante en appelant_fpreset.N’utilisez
longjmppas pour transférer le contrôle à partir d’une routine de rappel appelée directement ou indirectement par le code Windows.Si le code est compilé à l’aide de /EHs ou /EHsc et que la fonction qui contient l’appel est
noexcept, les objets locaux de cette fonction peuvent ne pas être destructeurs pendant le déroulement de lalongjmppile.
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 de setjmp et longjmp.
Spécifications
| Routine | En-tête requis |
|---|---|
longjmp |
<setjmp.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
Consultez l’exemple pour _fpreset.