2009-11-25 18 views

Répondre

1

De the C standard [PDF Link] (5.1.2.2.3):

un retour de l'appel initial à la fonction main équivaut à appeler la fonction exit avec la valeur retournée par la fonction main comme son argument; atteindre le } qui termine la fonction principale renvoie une valeur de 0.

Il est de la responsabilité de la fonction exit d'appeler les fonctions enregistrées avec atexit (voir 7.20.4.3 dans la norme pour une description de tout ce qui exit fait).

+0

Oui, je passais le code de sortie, et j'ai remarqué qu'il avait un appel explicite à atExit(). Existe-t-il une autre façon de faire cela en jouant avec la pile (sans écraser l'adresse de retour) pour qu'elle entre dans la fonction myExit() lorsque Main se termine. Merci! – Setzer

+0

Plus probable que le compilateur émet du code qui: initialise les globals; puis appelle principal; appelle ensuite exit avec la valeur de retour de main. –

6

En C, la fonction est appelée par une autre fonction intégrée dans le runtime. Cette fonction, après la fin de la fonction main(), permet d'effectuer quelques opérations supplémentaires. L'un d'eux est d'appeler toutes les fonctions qui ont été enregistrées avec le atexit(). Cette fonction stocke en fait une sorte de liste statique de pointeurs de fonction, qui seront appelés par le moteur d'exécution après main().

+1

Le fichier est souvent appelé crt0.o; il fait le travail d'installation, puis exécute 'exit (main (argc, argv));' –