Почему эти имена функций в скобках?

Я давно хотел задать этот вопрос. Что происходит с этими функциями? Почему имена в скобках?

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-версия из них.

Это указатели на функции, а не имена функций. Таким образом, они могут указывать на любую функцию того же типа и свойств.

Другие вопросы по тегам