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.