所以通常我会像这样声明任何函数指针:
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 错误还是相反?
提前致谢!
编辑 1:确切的错误消息是:Types 'hash_function' and size_t(const int *)' are not compatible
编辑 2:这似乎是 Clion Bug
最佳答案
CLion 似乎有一个错误(可能)。函数名称的类型为 size_t(const int *)
。现在,由于函数可以隐式转换为函数指针,因此您的代码是完全有效的 C。
CLion 语法检查器可能不考虑隐式转换。如果您从函数名中显式获得函数指针,错误应该消失:
hash_table_create(&hash_modulo); // Note the ampersand
关于c - 了解高阶函数在 C 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41919737/