Condividi tramite


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;
      }
   }
}