setjmp
Salva lo stato corrente del programma.
Sintassi
int setjmp(
jmp_buf env
);
Parametri
env
Variabile in cui è archiviato l'ambiente.
Valore restituito
Restituisce 0 dopo aver salvato l'ambiente dello stack. Se setjmp
restituisce a causa di una longjmp
chiamata, restituisce l'argomento di longjmp
o se l'argomento value
value
di longjmp
è 0, setjmp
restituisce 1. Non viene restituito alcun errore.
Osservazioni:
La funzione setjmp
salva un ambiente dello stack che successivamente è possibile ripristinare utilizzando longjmp
. Quando setjmp
e longjmp
vengono utilizzate insieme, offrono un metodo per eseguire goto
non in locale. In genere vengono usati per passare il controllo di esecuzione al codice di gestione degli errori o di ripristino in una routine chiamata in precedenza senza usare le normali convenzioni di chiamata o restituzione.
Una chiamata a setjmp
salva l'ambiente corrente dello stack in env
. Una chiamata successiva a longjmp
ripristina l'ambiente salvato e restituisce il controllo al punto immediatamente successivo alla corrispondente chiamata setjmp
. Tutte le variabili (eccetto le variabili di registro) accessibili al controllo di ricezione di routine contengono i valori che avevano quando longjmp
è stato chiamato.
Non è possibile usare setjmp
per passare dal codice nativo al codice gestito.
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. Per informazioni dettagliate, vedere longjmp
.
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 |
---|---|
setjmp |
<setjmp.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
Vedere l'esempio per _fpreset
.