Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Ripristina l'ambiente dello stack e le impostazioni locali di esecuzione impostate da una setjmp chiamata.
Sintassi
void longjmp(
jmp_buf env,
int value
);
Parametri
env
Variabile in cui è archiviato l'ambiente.
value
Valore da restituire alla chiamata di setjmp.
Osservazioni:
La funzione longjmp ripristina un ambiente dello stack e le impostazioni locali di esecuzione precedentemente salvati in env da setjmp. setjmp e longjmp forniscono un modo per eseguire un oggetto non locale goto. In genere vengono usati per passare il controllo dell'esecuzione al codice di gestione degli errori o di ripristino in una routine chiamata in precedenza senza usare le normali convenzioni di chiamata e restituzione.
Una chiamata a setjmp causa il salvataggio dell'ambiente corrente dello stack in env. Una chiamata successiva a longjmp ripristina l'ambiente salvato e restituisce il controllo al punto immediatamente successivo alla chiamata setjmp corrispondente. L'esecuzione riprende come se value fosse stata restituita dalla setjmp chiamata. I valori di tutte le variabili (eccetto le variabili di registro) accessibili per la routine che riceve il controllo contengono i valori esistenti al momento della chiamata di longjmp. I valori delle variabili di registro sono imprevedibili. Il valore restituito da setjmp deve essere diverso da zero. Se value viene passato come 0, il valore 1 viene sostituito nella restituzione effettiva.
Sezione specifica Microsoft
Nel codice Microsoft C++ in Windows longjmp usa la stessa semantica di rimozione dello stack del codice di gestione delle eccezioni. È possibile usare in modo sicuro nelle stesse posizioni che è possibile generare eccezioni C++. Tuttavia, questo utilizzo non è portabile e include alcune avvertenze importanti.
Chiamare solo prima della funzione che ha chiamato setjmp restituisce. In caso longjmp contrario, i risultati sono imprevedibili.
Tenere conto delle restrizioni seguenti quando si usa longjmp:
Non presupporre che i valori delle variabili di registro rimangano invariati. I valori delle variabili di registro nella routine che chiama
setjmppotrebbero non essere ripristinati sui valori appropriati dopo l'esecuzione dilongjmp.Non usare
longjmpper 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 il controllo da un gestore di interrupt tramitelongjmpse reinizializza prima di tutto il pacchetto di operazioni matematiche a virgola mobile chiamando_fpreset.Non usare
longjmpper trasferire il controllo da una routine di callback richiamata direttamente o indirettamente dal codice di Windows.Se il codice viene compilato usando /EHs o /EHsc e la funzione che contiene la
longjmpchiamata ènoexcept, gli oggetti locali in tale funzione potrebbero non essere destruiti durante la rimozione dello stack.
Fine sezione specifica Microsoft
Nota
Nel codice C++ portabile non è possibile presupporre setjmp e longjmp supportare la semantica degli oggetti C++. In particolare, una setjmp/longjmp coppia di chiamate ha un comportamento indefinito se sostituisce setjmp e longjmp da catch e throw richiama eventuali distruttori non semplici per qualsiasi oggetto automatico. Nei programmi C++ è consigliabile usare il meccanismo di gestione delle eccezioni C++.
Per altre informazioni, vedere Uso di setjmp e longjmp.
Requisiti
| Ciclo | Intestazione obbligatoria |
|---|---|
longjmp |
<setjmp.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
Vedere l'esempio per _fpreset.