Utilizzo di setjmp/longjmp
Quando setjmp e longjmp vengono utilizzate insieme, offrono un metodo per eseguire gotonon in locale. In genere vengono utilizzate per passare il controllo di esecuzione alla gestione degli errori o al codice di ripristino in una routine chiamata in precedenza senza utilizzare le convenzioni standard di chiamata o restituzione.
Avviso
Tuttavia, poiché setjmp e longjmp non supportano la semantica degli oggetti C++, e dato che potrebbero compromettere le prestazioni impedendo l'ottimizzazione delle variabili locali, si consiglia di non utilizzarle nei programmi C++.Si consiglia di utilizzare invece il costruttore try/catch.
Se si decide di utilizzare setjmp/longjmp in un programma C++, includere anche SETJMP.H o SETJMPEX.H, in modo da garantire la corretta interazione tra le funzioni e la gestione delle eccezioni C++. Se si utilizza /EH per la compilazione, i distruttori per gli oggetti locali vengono chiamati durante la rimozione dello stack. Se si utilizza /EHs per la compilazione e una delle funzioni chiama una funzione che utilizza nothrow, mentre la funzione che utilizza nothrow chiama longjmp, la rimozione del distruttore potrebbe non avvenire, a seconda dell'utilità di ottimizzazione.
Nel codice portabile, quando viene eseguito goto non locale che chiama longjmp, la corretta distruzione corretta oggetti basati su frame può rivelarsi inaffidabile.