C programmers never die.
They are just cast into void.

Esempi C - Chiamare una funzione all'uscita dal programma

Il primo esempio mostra l'utilizzo della funzione atexit, che viene utilizzata per registrare una funzione dichiarata come
void function();
da chiamare all'uscita dal programma, sia che questa avvenga a causa di un ritorno da main, sia tramite una chiamata esplicita a exit.

La registrazione avviene passando a atexit un puntatore alla funzione di chiusura:

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

void close_function();

int main(int argc, char *argv[]) {
	printf("Inizio ...\n");
	atexit(close_function);
}

void close_function() {
	printf("... Fine.\n");
}

Versione con parametri

Nei casi in cui e' utile passare parametri alla funzione di chiusura, si puo' utilizzare la funzione on_exit, che prende come parametro un puntatore ad una funzione del tipo
void function(int status, void *argp);
Quando la funzione viene chiamata il valore di status viene impostato allo stato con cui viene chiamata exit e il secondo parametro al puntatore passato come secondo argomento di on_exit.

Ricordiamo infine che il un puntatore a void rappresenta un puntatore ad un tipo qualunque; occorre poi effettuare il cast (che potrebbe anche essere implicito ma e' stato scritto esplicitamente per chiarezza) ad un puntatore al tipo corretto.

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

#define EXIT_PARAM_LENGTH 2

void close_function(int status, void *argp);

int main(int argc, char *argv[]) {
	int val[] = {10, 2};
	printf("Inizio ...\n");
	on_exit(close_function, val);
	exit(3);
}

void close_function(int status, void *argp) {
	int i;
	int *arg = (int *)argp;
	printf("Stato uscita: %d\n", status);
	for(i=0; i<EXIT_PARAM_LENGTH; i++)
		printf("Parametro %d: %d\n", i, arg[i]);
	printf("Fine.\n");
}