Так обычно я бы объявить любой указатель функции, как это:Понимание того, как высшие функции порядка работы в C
typedef size_t (*hash_function)(const int *);
а затем использовать его в другой функции
HashTable *hash_table_create(const hash_function hash)
так что для любой функции, которая выполняет определение hash_function как
size_t hash_modulo(const int *parameters)
size_t hash_universal(const int *parameters)
...
я могу использовать их в качестве параметра
hash_table_create(hash_modulo)
Проблема заключается в: Мой IDE (Clion) жалуется, что параметры в данном случае не совпадают (код работает Тхо). В частности, это не похоже на передачу hash_function
в качестве типа параметра, но будет приниматься, если вместо этого я использую size_t (*hash_function)(const int *)
. Что мне здесь не хватает?
Является ли мой код правильным и моя IDE неправильным или наоборот?
Заранее благодарен!
Edit 1: Точное сообщение об ошибке: Types 'hash_function' and size_t(const int *)' are not compatible
Edit 2: Это, кажется, Clion Bug
Я полагаю, вы могли бы попытаться определить функцию вместо указательного типа в качестве возможного решения проблемы, например,'typedef size_t hash_function_t (const int *);' и 'HashTable * hash_table_create (hash_function_t * hash);' (и, возможно, 'extern hash_function_t hash_modulo, hash_universal;'.) – doynax
Это отлично работает в GCC. И я не вижу никакой причины, которой это не должно быть. – Gerhardh