c - 了解高阶函数在 C 中的工作原理

标签 c function-pointers higher-order-functions

所以通常我会像这样声明任何函数指针:

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/

相关文章:

python - 如何在 C 中使用 pyarg_parsetuple 设置多个参数?

c++ - sdl 45 度运动

使用c从一个txt文件复制到另一个txt文件

c++ - 在 C/C++ 中加载 OpenSSL 自定义引擎

c - 动态数组 C

c++ - 指向 objc 类成员方法的函数指针,用于 C++?

c++ - 函数指针需要和号吗

Java高阶多态函数

c++ - 参数化运算符重载

C++:实现一个接收 lambda 作为输入的高阶函数