Condividi tramite


longjmp

Ripristinare l'ambiente dello stack e le impostazioni locali di esecuzione.

void longjmp( 
   jmp_buf env, 
   int value  
);

Parametri

  • env
    Variabile in cui viene archiviato l'ambiente.

  • corrispondente
    Valore da restituire alla chiamata setjmp.

Note

La funzione longjmp ripristina l'ambiente dello stack e le impostazioni locali di esecuzione precedentemente salvate in env da setjmp. setjmp e longjmp forniscono un modo per eseguire un goto non locale; in genere sono utilizzati per passare il controllo di esecuzione alla gestione degli errori o del codice di recupero in una routine precedentemente chiamata senza utilizzare le normali convenzioni di chiamata e ritorno.

Una chiamata a setjmp fa in modo che l'ambiente corrente dello stack venga salvato in env. Una chiamata successiva a longjmp ripristina l'ambiente salvato e ritorna il controllo al punto immediatamente successivo alla corrispondente chiamata setjmp. L'esecuzione riprende come se value sia stato restituito solo dalla chiamata setjmp. I valori di tutte le variabili (eccetto le variabili del registro), che sono accessibili al controllo di ricevimento di routine, contengono i valori che avevano quando longjmp è stato chiamato. I valori delle variabili del registro sono imprevedibili. Il valore restituito da setjmp deve essere diverso da zero. Se value viene passato come 0, il valore 1 viene sostituito nel valore di ritorno attuale.

Chiamare longjmp prima che la funzione chiamata setjmp ritorni; in caso contrario i risultati sono imprevedibili.

Osservare le restrizioni seguenti quando si utilizza longjmp:

  • Non dare per certo che i valori delle variabili del registro rimarranno gli stessi. I valori delle variabili del registro nella routine chiamante setjmp non possono essere ripristinati ai valori appropriati dopo l'esecuzione di longjmp.

  • Non utilizzare longjmp per trasferire il controllo da una routine di gestione degli interrupt a meno che l'interrupt non sia causato da un'eccezione a virgola mobile. In questo caso, un programma può restituire da un gestore di interrupt attraverso longjmp se innanzitutto reinizializza il package math a virgola mobile chiamando _fpreset.

    Nota   Fare attenzione quando si utilizzano setjmp e longjmp nei programmi C++. Poiché queste funzioni non supportano la semantica degli oggetti C++, è consigliabile utilizzare il meccanismo di gestione delle eccezioni C++.

Per ulteriori informazioni, vedere Utilizzo di setjmp e longjmp.

Requisiti

Routine

Intestazione obbligatoria

longjmp

<setjmp.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.

Librerie

Tutte le versioni delle Librerie di runtime C.

Esempio

Vedere un esempio per _fpreset.

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

Controllo processo e ambiente

setjmp