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.

    Note Fare attenzione quando si utilizza 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

Processo e controllo ambiente

setjmp