Atexit

ceer
int atexit(void (*fcn)(void)));

Funkcja atexit() rejestruje funkcję fcn, którą należy wykonać przy normalnym zakończeniu aplikacji. W przypadku, gdy rejestracja funkcji nie jest możliwa, funkcja atexit() zwraca wartość różną od zera (w przypadku błędu, funkcja nie ustawia wartości Errno). Jako argument podawany jest wskaźnik do funkcji.

Można zarejestrować kilkanaście funkcji wykonywanych przy normalnym zakończeniu programu. Funkcje te zostaną wywołane w odwrotnej kolejności, niż zostały zarejestrowane (jak to ma miejsce przy okazji stosu). Każda jedna funkcja może być zarejestrowana więcej niż jeden raz (co spowoduje jej wielokrotne wywołanie, zgodnie z kolejnością rejestracji).

Przykład użycia funkcji atexit()

```c #include <stdio.h> #include <stdlib.h>

void funkcjaWyjsciowa1 (void)
{
printf("Funkcja wyjsciowa nr 1.\n");
return;
}

void funkcjaWyjsciowa2 (void)
{
printf("Funkcja wyjsciowa nr 2.\n");
return;
}

int main(int argc, char* argv[])
{
atexit(funkcjaWyjsciowa1);
atexit(funkcjaWyjsciowa2);
atexit(funkcjaWyjsciowa1);

printf("Wykonywane sa pewne operacje...\n");

/* {...} */

return 0;
}

Przy normalnym zakończeniu programu, spowoduje to wypisanie w konsoli:

<kbd>Wykonywane sa pewne operacje...
Funkcja wyjsciowa nr 1.
Funkcja wyjsciowa nr 2.
Funkcja wyjsciowa nr 1.</kbd>

Oczywiście głównym założeniem tej funkcji jest to, by za jej pomocą zwalniać pamięć, wywoływać destruktory itp..

____
<b>Zobacz też:</b>
* [[C/exit]]
* [[C/Abort]]
* [[C/free]]

0 komentarzy