Avviso del compilatore (livello 1) C4532
'continuazione': il salto dal blocco __finally genera un comportamento indefinito durante la gestione della terminazione
È stata rilevata una delle seguenti parole chiave:
che provoca l'uscita da un blocco __finally o finally durante una terminazione anomala.
Se viene generata un'eccezione e, mentre lo stack viene svuotato durante l'esecuzione dei gestori di terminazione (blocchi __finally o finally), viene eseguita l'uscita da un blocco __finally prima che il blocco __finally termini, il comportamento sarà indefinito. È possibile che il controllo non torni al codice di svuotamento e che, pertanto, l'eccezione non venga gestita correttamente.
Se è necessario uscire da un blocco __finally , verificare prima la presenza di terminazioni anomale.
Nell'esempio seguente viene generato l'avviso C4532. Per evitare la visualizzazione degli avvisi, è sufficiente impostare le istruzioni di spostamento come commento.
// C4532.cpp
// compile with: /W1
// C4532 expected
int main() {
int i;
for (i = 0; i < 10; i++) {
__try {
} __finally {
// Delete the following line to resolve.
continue;
}
__try {
} __finally {
// Delete the following line to resolve.
break;
}
}
}