Partilhar via


Aviso do compilador (nível 1) C4532

'continue': a saída do bloco '__finally/finally' tem um comportamento indefinido durante a manipulação do encerramento

Comentários

O compilador encontrou uma das seguintes palavras-chave:

que estão causando um salto de um bloco __finally ou finally durante o encerramento anormal.

Se ocorrer uma exceção, e enquanto a pilha estiver sendo desenrolada durante a execução dos manipuladores de terminação (os blocos __finally ou finally), e o código saltar de um bloco __finally antes do fim do bloco __finally, o comportamento será indefinido. O controle pode não retornar ao código de desenrolamento, portanto, a exceção pode não ser tratada corretamente.

Se você precisar sair de um bloco __finally, verifique primeiro se há uma terminação anormal.

A opção do compilador /sdl (Habilitar Verificações de Segurança Adicionais) eleva esse aviso a um erro.

Exemplo

O exemplo a seguir gera C4532; exclua as instruções de salto ou transforme-as em comentários para resolver os avisos.

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