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 b
como uma variável do tipo a
? Ou uma chamada para funcionar a
com 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.