Что означает это утверждение языка Си?

#c #function #types #syntax #function-pointers

#c #функция #типы #синтаксис #указатели на функции

Вопрос:

 int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx)
 

Я нахожу этот фрагмент кода, не уверен, как его понять. Я думаю, что EVP_MD_meth_get_cleanup — это имя типа указателя функции, возвращающее значение int, но не понимающее часть аргумента.

Ответ №1:

EVP_MD_meth_get_cleanup это функция, которая принимает const EVP_MD *md в качестве аргумента и возвращает указатель на функцию. Этот указатель на функцию принимает EVP_MD_CTX *ctx и возвращает int .

Нет ничего лучше, чем пример:

 int somefunction(EVP_MD_CTX *ctx) {
    stuff();
}

int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx) {
   return somefunction;
}
 

Комментарии:

1. Компилируется нормально godbolt.org/z/a1ajdK5b9