c - 理解传递的这个参数

标签 c

Linux 海湾合作委员会 4.4.1

我有这个传递第二个参数的函数,该参数将其转换为不同的类型。我只是想知道我是否正确?

在我看来,它正在将函数 evt_hdlr 转换为 void * 类型,转换为长指针类型。

if(enable_evt_hdlr(EV_ANY, (long (*) (void *)) evt_hdlr) == -1)
{
..
}

函数 evt_hdlr 定义如下所示:

static int32_t evt_hdlr(void);

非常感谢您的任何建议,

最佳答案

你转换了一个没有参数的函数,并返回一个 int32_t 到一个带有 void* 参数的函数指针,返回一个 long。这可能会奏效,但运气大于技巧(long 和 int32_t 不一定相同)。

如果您不能更改 enable_evt_hdlr 或 evt_hdlr 的类型,则创建一个中间函数:

static long my_evt_hdlr(void*)
{
  return (long) evt_hdlr();
}

并将其传递给事件处理程序。这样堆栈将按 promise 处理。

关于c - 理解传递的这个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951757/

相关文章:

c - 文件处理 - 检查整个单词

android -/system/bin/linker 中的段错误与为 Android 编译的二进制文件

c - 如何删除 ':' token 之前的错误 : expected ',' , ';' 、 '}' 、 '__attribute__' 或 '=' ?

c++ - 声明为 `extern "C"` 的函数的限制?C++ 功能是否仍然可用?

我可以写入非常量结构的 const 成员吗?

c - 如何在不刷新缓冲区的情况下用换行符打印字符串?

c++ - 对图像中的一系列颜色进行阈值处理

c - Loadrunner:将很多xml文件内容存储在一个数组中并一一调用数组

c - 从 Linux 系统中删除文件的哪一个是更好的选择

c - Microsoft C 运行时库中的函数有何作用?