A função atexit () em C ++ registra uma função a ser chamada no encerramento normal do programa.
A função atexit () em C ++ registra uma função a ser chamada no encerramento normal do programa.
protótipo atexit ()
extern int atexit (void (* func) (void));
Esta função é definida no arquivo de cabeçalho.
Parâmetros atexit ()
- func: Ponteiro para a função a ser chamada no término normal do programa.
atexit () Valor de retorno
A função atexit () retorna:
- Zero se o registro da função for bem-sucedido.
- Diferente de zero se o registro da função falhou.
Exemplo 1: Como funciona a função atexit ()?
#include #include using namespace std; void bye() ( cout << "Program Exiting Successfully"; ) int main() ( int x; x = atexit(bye); if (x != 0) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Quando você executa o programa, a saída será:
Registro bem-sucedido. Programa saindo com sucesso
Mais de uma função pode ser registrada para executar no encerramento.
Se mais de uma função atexit for registrada, elas serão executadas na ordem reversa, ou seja, a função atlast registrada será executada primeiro. A mesma função pode ser registrada mais de uma vez.
O número de chamadas de funções que podem ser registradas com atexit () depende da implementação de biblioteca específica. No entanto, o limite mínimo é 32.
Exemplo 2: registrando várias funções com atexit ()
#include #include using namespace std; void exit1() ( cout << "Exit Function 1" << endl; ) void exit2() ( cout << "Exit Function 2" << endl; ) void exit3() ( cout << "Exit Function 3" << endl; ) int main() ( int x1, x2, x3; /* Executed at last*/ x1 = atexit(exit1); x2 = atexit(exit2); /* Executed at first */ x3 = atexit(exit3); if ((x1 != 0) or (x2 != 0) or (x3 != 0)) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Quando você executa o programa, a saída será:
Registro bem-sucedido Sair da Função 3 Sair da Função 2 Sair da Função 1
Se uma função registrada lançar uma exceção não tratada quando chamada no encerramento, a função terminate () será chamada.
Exemplo 3: atexit () com função lançando exceção não tratada
#include #include using namespace std; void bye() ( cout << "Generates Exception"; int a = 5, b = 0; int x = a/b; /* Program will terminate here */ cout << "Division by zero"; ) int main() ( int x; x = atexit(bye); if (x != 0) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Quando você executa o programa, a saída será:
O registro bem-sucedido gera exceção