En C, la falta de relación entre los “extremos” principal proceso de “llamar a ninguna función registrada con atexit”
Pregunta
En C, cuando los principales fines del proceso -? ¿Cómo sabe que llamar a ninguna función registrada con atexit()
Me entender cómo funciona atexit()
, pero no entiendo la comunicación entre "proceso principal que termina" y "llamar a las funciones registradas con atexit()
" estoy siendo un poco redundante.
Gracias!
Solución
Desde la C estándar [ PDF Link] (5.1.2.2.3):
un retorno de la llamada inicial a la función
main
es equivalente a llamar a la funciónexit
con el valor devuelto por la funciónmain
como su argumento; llegar a la}
que termina la función principal devuelve un valor de0
.
Es la responsabilidad de la función exit
a llamar a las funciones registradas con atexit
(véase 7.20.4.3 en el estándar para la descripción de todo lo que hace exit
).
Otros consejos
En C, la función main()
se llama en realidad por alguna otra función, que se construye en el tiempo de ejecución. Esta función, después de que termine la función main()
, hace algunas cosas más a la limpieza. Uno de ellos es llamar a las funciones que han sido registradas en la atexit()
. Esta función almacena realmente algún tipo de lista estática de los punteros de función, que será llamado por el tiempo de ejecución después de main()
.