Почему эти имена функций в скобках?
Я давно хотел задать этот вопрос. Что происходит с этими функциями? Почему имена в скобках?
void (*think)(gentity_t *self);
void (*reached)(gentity_t *self); // movers call this when hitting endpoint
void (*blocked)(gentity_t *self, gentity_t *other);
void (*touch)(gentity_t *self, gentity_t *other, trace_t *trace);
3 ответа
В ваших примерах скобка в имени функции означает, что переменная указывает на адрес функции. Если вы не используете скобки
void * think(gentity_t *self);// equal (void *) think(gentity_t *self);
Это означает определение функции с именем:think, return: void *, параметр: gentity_t *self; Это переменные, указывающие на функции.
Эти объявления являются указателями на функции, которые указывают на функцию и могут быть изменены в любое время.
Я предлагаю вам немного изучить указатели на функции в C, потому что они очень полезны.
Если вы знаете, C++ std::function
тогда это фактически старая C-версия из них.
Это указатели на функции, а не имена функций. Таким образом, они могут указывать на любую функцию того же типа и свойств.