setjmp.h é um arquivo cabeçalho da biblioteca padrão da linguagem de programação C que fornece declarações para funções ou macros para funcionalidade de saltos que não seguem a forma usual de chamadas para subrotinas e a sequência de retornos.

Um uso típico para as funções setjmp e longjmp é a implementação de um mecanismo de tratamento de exceções que utiliza a longjmp para re-estabelecer o estado de um programa ou thread, mesmo numa chamada com múltiplos níveis. Outro uso para setjmp é criar uma sintaxe similar a co-rotinas.

Exemplo

O exemplo abaixo mostra a ideia básica do setjmp:

#include <stdio.h> #include <setjmp.h>

static jmp_buf controladorJmp;

void segunda(void) { printf("segunda\n"); // será impresso na tela

// pula de volta para onde setjmp() foi chamada, // e faz com que ela agora retorne 1 longjmp(controladorJmp, 1); }

void primeira(void) { segunda(); printf("primeira\n"); // não será impresso na tela }

int main() { if (setjmp(controladorJmp) == 0) { primeira(); } else { // quando longjmp() é chamada, setjmp() retornou 1 printf("main\n"); // será impresso na tela

return 0; }

Quando executado, o programa acima imprime na tela:

segunda main

Categoria:C (linguagem de programação)