Em C, o link ausente entre "o processo principal termina" para "chamar quaisquer funções registradas no Atexit"
Pergunta
Em C, quando o processo principal termina - como ele sabe chamar quaisquer funções registradas com atexit()
?
Eu entendo como atexit()
trabalha, mas não entendo a comunicação entre "o final do processo principal" e "Chame quaisquer funções registradas com atexit()
"Estou sendo um pouco redundante.
Obrigado!
Solução
A partir de o padrão C. Link pdf] (5.1.2.2.3):
um retorno da chamada inicial ao
main
A função é equivalente a chamar oexit
função com o valor retornado pelomain
função como seu argumento; chegando ao}
que encerra a função principal retorna um valor de0
.
É de responsabilidade do exit
função para chamar as funções registradas com atexit
(Veja 7.20.4.3 no padrão para uma descrição de tudo o que exit
faz).
Outras dicas
Em C, o main()
A função é realmente chamada por outra função, que é incorporada no tempo de execução. Esta função, depois do main()
A função termina, faz mais algumas coisas para limpar. Um deles é chamar quaisquer funções que foram registradas com o atexit()
. Essa função realmente armazena algum tipo de lista estática de ponteiros de função, que serão chamados pelo tempo de execução depois main()
.