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