Что-то я в ИАР-е не понял... Он что, не жрёт такое:
void (*fptr)(void);
fptr();
/* и ему ОБЯЗАТЕЛЬНО надо */
(*fptr)();
???
А что, и для:
void moo(void);
fptr = moo;
ему перед moo надо ставить взятие адреса?
Дурдом...
Фрагмент из стандарта C99 (пункт 6.9.1)
14 EXAMPLE 2 To pass one function to another, one might say
int f(void);
/* ... */
g(f);
Then the definition of g might read
void g(int (*funcp)(void))
{
/* ... */
(*funcp)() /* or funcp() ... */
}
or, equivalently,
void g(int func(void))
{
/* ... */
func() /* or (*func)() ... */
}
ТОЧНО ТАК ЖЕ это место выглядит в стандарте C89, только там это пункт 3.7.1
И я ничего на колоду не положу, но вроде бы и до 89-го года я считал, что записи (*funcptr)() и funcptr() полностью эквивалентны. И вообще привык к тому, что имя функции - это указатель на неё.
По крайней мере ещё на ДВК-шке у меня код системы меню имел в структуре указатель на обработчик пункта и я не припомню, чтобы я писал
(*pmenuentry->handler)();
а не
pmenuentry->handler()