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.
Quando setjmp e longjmp vengono usati insieme, forniscono un modo per eseguire un oggetto non localegoto. Vengono in genere usati nel codice C per passare il controllo di esecuzione al codice di gestione degli errori o di ripristino in una routine chiamata in precedenza senza usare le convenzioni standard di chiamata o restituzione.
Attenzione
Poiché setjmp e longjmp non supportano la corretta distruzione degli oggetti stack frame tra i compilatori C++ e perché potrebbero compromettere le prestazioni impedendo l'ottimizzazione sulle variabili locali, non è consigliabile usarli nei programmi C++. È consigliabile usare try e catch costrutti.
Se si decide di usare setjmp e longjmp in un programma C++, includere <anche setjmp.h> o <setjmpex.h> per garantire l'interazione corretta tra le funzioni e la gestione delle eccezioni strutturate (SEH) o C++.
Sezione specifica Microsoft
Se si usa un'opzione /EH per compilare il codice C++, i distruttori per gli oggetti locali vengono chiamati durante la rimozione dello stack. Tuttavia, se si usa /EHs o /EHsc per la compilazione e una delle funzioni che usa noexcept chiama longjmp, la rimozione del distruttore per tale funzione potrebbe non verificarsi, a seconda dello stato dell'utilità di ottimizzazione.
Nel codice portabile, quando viene eseguita una longjmp chiamata, la corretta distruzione degli oggetti basati su frame non è garantita in modo esplicito dallo standard e potrebbe non essere supportata da altri compilatori. Per informare l'utente, al livello di avviso 4, una chiamata a setjmp causa dell'avviso C4611: l'interazione tra "_setjmp" e la distruzione degli oggetti C++ non è portabile.
Fine sezione specifica Microsoft