ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
61590 Топик полностью
ReAl (29.06.2006 03:30, просмотров: 1) ответил Павел В. на Короче, полевые испытания показали следующее
Что-то я в ИАР-е не понял... Он что, не жрёт такое: 
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()