Macro AnomaloTermination
Indica se il blocco __try di un gestore di terminazione terminato normalmente. La funzione può essere chiamata solo dall'interno del blocco __finally di un gestore di terminazione.
Nota
L'ottimizzazione del compilatore Microsoft C/C++ interpreta questa funzione come parola chiave e il relativo uso all'esterno della sintassi di gestione delle eccezioni appropriata genera un errore del compilatore.
Sintassi
BOOL AbnormalTermination(void);
Parametri
Questa macro non ha parametri.
Valore restituito
Se il blocco di __try termina in modo anomalo, il valore restituito è diverso da zero.
Se il blocco __try terminato normalmente, il valore restituito è zero.
Commenti
Il blocco __try termina normalmente solo se l'esecuzione lascia il blocco in sequenza dopo l'esecuzione dell'ultima istruzione nel blocco. Istruzioni (ad esempio restituite, goto, continua o interruzione) che causano l'esecuzione di lasciare il blocco __try causano una terminazione anomala del blocco. Questo è il caso anche se tale istruzione è l'ultima istruzione nel blocco __try .
La terminazione anomala di un blocco __try causa la ricerca indietro del sistema attraverso tutti i frame dello stack per determinare se è necessario chiamare i gestori di terminazione. Ciò può comportare l'esecuzione di centinaia di istruzioni, quindi è importante evitare la terminazione anomala di un blocco __try a causa di un'istruzione restituita, goto, continua o interruzione . Si noti che queste istruzioni non generano un'eccezione, anche se la terminazione è anomala.
Per evitare la terminazione anomala, l'esecuzione deve continuare alla fine del blocco. È anche possibile eseguire l'istruzione __leave . L'istruzione __leave consente la terminazione immediata del blocco __try senza causare la terminazione anomala e la relativa penalità per le prestazioni. Controllare la documentazione del compilatore per determinare se l'istruzione __leave è supportata.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows XP [solo app desktop] |
Server minimo supportato |
Windows Server 2003 [solo app desktop] |