In einer meiner Projektquelldateien habe ich diese C-Funktionsdefinition gefunden:
int (foo) (int *bar)
{
return foo (bar);
}
Hinweis: Neben befindet sich kein Sternchen foo
, daher handelt es sich nicht um einen Funktionszeiger. Oder ist es? Was ist hier mit dem rekursiven Aufruf los?
a(b);
? Deklaration b
als Variable des Typs a
? Oder ein Aufruf, a
mit Argumenten zu funktionieren b
? Der Unterschied ist syntaktisch, und Sie können nicht wissen, wie Sie ihn überhaupt analysieren können, ohne die Deklarationsinformationen von nachzuschlagen a
. Dies sind die Klammern für Postfix-Funktionsaufrufe oder optionale Klammern um einen Deklarator.