В одном из исходных файлов моего проекта я нашел определение функции C:
int (foo) (int *bar)
{
return foo (bar);
}
Примечание: рядом нет звездочки foo
, поэтому это не указатель на функцию. Либо это? Что здесь происходит с рекурсивным вызовом?
a(b);
? Объявление b
в качестве переменной типа a
? Или вызов функции a
с аргументом b
? Разница в синтаксисе, и вы не можете знать, каким образом ее анализировать, не просматривая информацию объявления a
; т. е. те скобки постфиксного вызова функции или необязательные скобки вокруг декларатора.