En C, chaînon manquant entre « processus principal se termine » à « appeler toutes les fonctions enregistrées avec atexit »
Question
En C, lorsque le principal processus se termine - comment savoir appeler toutes les fonctions enregistrées avec atexit()
Je comprends comment fonctionne atexit()
, mais je ne comprends pas la communication entre « processus principal de fin » et « appelle toutes les fonctions enregistrées avec atexit()
» Je suis peut être un peu redondant.
Merci!
La solution
De la norme C [ Lien PDF] (5.1.2.2.3):
un retour de l'appel initial à la fonction
main
équivaut à appeler la fonction deexit
avec la valeur renvoyée par la fonction demain
comme argument; atteindre la}
qui termine la principale fonction retourne une valeur de0
.
Il est de la responsabilité de la fonction exit
pour appeler les fonctions enregistrées avec atexit
(voir 7.20.4.3 dans la norme pour une description de tout ce qui fait exit
).
Autres conseils
En C, la fonction main()
est en fait appelée par une autre fonction, qui est intégré dans le moteur d'exécution. Cette fonction, après la fin de la fonction main()
, fait un peu plus de choses à nettoyer. L'un d'eux est d'appeler toutes les fonctions qui ont été enregistrées au atexit()
. Cette fonction stocke en fait une sorte de liste statique des pointeurs de fonction, qui sera appelé par le moteur d'exécution après main()
.