Definições de funções em C não podem ser aninhadas, mas ativações de função podem: uma função, digamos A, pode chamar uma outra função, digamos B (dizemos que A chama B). Nos referimos a A como o ``chamador'' e B como a função ``chamada''.
O que acontece quando uma função chama outra (quando A chama B)? Um registro especial, chamado registro de ativação é criado. A informação neste registro é necessária para a ativação da função chamada e para a reativação do chamador depois que a execução da função chamada termina.
O fluxo de controle através de ativação de funções é da forma último-que-entra-primeiro-que-sai. Se A chama B e B chama C: A é ativado primeiro, então B é ativado (um registro de ativação para ``A chama B'' é criado e armazenado, A é temporariamente suspenso), então C é ativado (um registro de ativação de ``B chama C'' é criado e armazenado, A e B são suspensos); C é o último a iniciar execução, mas o primeiro a terminar (último-a-entrar-primeiro-a-sair). Depois que C termina, B é reativado. O registro de ativação ``B chama C'' foi criado por último, mas o primeiro a ser destruído (no momento que o controle é retornada para B). Depois que B termina, A é reativado. O registro de ativação correspondente a ``A chama B'' é destruído no momento em que o controle retorna para A.
Armando Luiz Nicolini Delgado