Em um dos arquivos de origem do meu projeto, encontrei esta definição de função C:
int (foo) (int *bar)
{
return foo (bar);
}
Nota: não existe um asterisco ao lado foo, portanto não é um ponteiro de função. Ou é? O que está acontecendo aqui com a chamada recursiva?
a(b);? Declaração de bcomo uma variável do tipo a? Ou uma chamada para funcionar acom argumento b? A diferença é sintática, e você não pode saber de que maneira analisá-la sem consultar as informações da declaração a; ou seja, são parênteses de chamada de função postfix ou parênteses opcionais ao redor de um declarador.