Combinazione di eccezioni C (strutturate) e C++
Se si vuole scrivere codice portabile, non è consigliabile usare la gestione strutturata delle eccezioni (edizione Standard H) in un programma C++. Tuttavia, a volte può essere necessario compilare usando /EHa
e combinare eccezioni strutturate e codice sorgente C++ e richiedere alcune funzionalità per la gestione di entrambi i tipi di eccezioni. Poiché un gestore di eccezioni strutturate non ha alcun concetto di oggetti o eccezioni tiptate, non può gestire le eccezioni generate dal codice C++. Tuttavia, i gestori C++ catch
possono gestire eccezioni strutturate. La sintassi di gestione delle eccezioni C++ (try
, throw
, catch
) non viene accettata dal compilatore C, ma la sintassi di gestione delle eccezioni strutturata (__try
, __except
, __finally
) è supportata dal compilatore C++.
Vedere _set_se_translator
per informazioni su come gestire le eccezioni strutturate come eccezioni C++.
Se si combinano eccezioni strutturate e C++, tenere presente questi potenziali problemi:
Le eccezioni C++ e le eccezioni strutturate non possono essere miste all'interno della stessa funzione.
I gestori di terminazione (
__finally
blocchi) vengono sempre eseguiti, anche durante la rimozione dopo la generazione di un'eccezione.La gestione delle eccezioni C++ può intercettare e mantenere la semantica di rimozione in tutti i moduli compilati con le opzioni del
/EH
compilatore, che consentono la semantica di rimozione.Potrebbero verificarsi alcune situazioni in cui le funzioni distruttori non vengono chiamate per tutti gli oggetti. Ad esempio, è possibile che si verifichi un'eccezione strutturata durante il tentativo di effettuare una chiamata di funzione tramite un puntatore di funzione non inizializzato. Se i parametri della funzione sono oggetti costruiti prima della chiamata, i distruttori di tali oggetti non vengono chiamati durante la rimozione dello stack.
Passaggi successivi
Uso
setjmp
olongjmp
nei programmi C++Vedere altre informazioni sull'uso di
setjmp
elongjmp
nei programmi C++.Gestire le eccezioni strutturate in C++
Vedere esempi dei modi in cui è possibile usare C++ per gestire le eccezioni strutturate.
Vedi anche
Procedure consigliate C++ moderne per le eccezioni e la gestione degli errori
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per