C · Avançado · Inglês · Técnico
setjmp e longjmp
Par de funções de setjmp.h que salva um ponto de execução e depois salta de volta a ele a partir de qualquer função mais profunda. É o mecanismo mais próximo de exceções em C.
Onde usar
Usado para recuperação de erros em parsers e bibliotecas como libpng. O salto ignora o retorno normal, então liberações de recursos intermediários são puladas.
Em código
jmp_buf env;
if (setjmp(env) == 0) {
falha(); // chama longjmp(env, 1)
} else {
puts("recuperado");
}Exemplos
The parser uses longjmp to bail out on a fatal error.
O parser usa longjmp para abandonar tudo num erro fatal.
longjmp skips the cleanup of everything in between.
O longjmp pula a limpeza de tudo que está no meio.
Cuidado
Esquecer que variáveis locais modificadas entre setjmp e longjmp ficam indeterminadas, a menos que sejam volatile.
Sinônimos
saltos não locais