mplementação de funções aninhad

Descobri recentemente que o gcc permite a definição de função aninhada. Na minha opinião, esse é um recurso interessante, mas gostaria de saber como implementá-l

Embora certamente não seja difícil implementar chamadas diretas de funções aninhadas passando um ponteiro de contexto como argumento oculto, o gcc também permite levar um ponteiro para uma função aninhada e passar esse ponteiro para uma outra função arbitrária que, por sua vez, pode chamar o função aninhada do contexto. Como a função que chama a função aninhada tem apenas o tipo da função aninhada a ser chamada, obviamente não pode passar um ponteiro de context

Sei que outros idiomas como Haskell, que possuem uma convenção de chamada mais complicada, permitem que aplicativos parciais suportem essas coisas, mas não vejo como fazê-lo em C. Como é possível implementar isso?

Aqui está um pequeno exemplo de caso que ilustra o problema:

int foo(int x,int(*f)(int,int(*)(void))) {
  int counter = 0;
  int g(void) { return counter++; }

  return f(x,g);
}

Esta função chama uma função que chama uma função que retorna um contador do contexto e o incrementa ao mesmo temp

questionAnswers(1)

yourAnswerToTheQuestion