Condividi tramite


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.

Vedere anche

Riferimenti

Combinazione di eccezioni C (strutturate) ed eccezioni C++