silver-crow 发表于 2024-3-16 11:48:54

这个回调函数怎么实现的?

#include <stdio.h>

//回调函数程序部分
typedef struct
{
    int status;
    void (*pstatusChange)();
}T_Device;

T_Device g_Device;

void addcallbackFunc(void *pstatusChange(int status))
{
    g_Device.pstatusChange = pstatusChange;
}

void run()
{
    g_Device.status = 10;
    if(g_Device.status == 10)
    {
      if(g_Device.pstatusChange != NULL)
      {
            g_Device.pstatusChange(g_Device.status);
      }
    }
}

//用户执行部分
void callback(int status)
{
    printf("status = %d\n", status);
}

void main(void)
{
    addcallbackFunc(callback);
    run();
}

人造人 发表于 2024-3-16 11:48:55

这样能看懂不?

#include <stdio.h>

void callback(int status) {
    printf("status = %d\n", status);
}

int main(void) {
    void (*pfunc)(int status) = callback;
    pfunc(123);
    return 0;
}

FishC 发表于 2024-3-16 11:49:12

这段代码是一个简单的使用回调函数的示例。让我来解释一下。

首先,我们定义了一个结构体 `T_Device`,其中包含了一个整型变量 `status` 和一个函数指针 `pstatusChange`。接着声明了全局变量 `g_Device`,类型为 `T_Device`。

然后,我们定义了一个名为 `addcallbackFunc` 的函数,它接受一个指向函数的指针作为参数,并将这个指针赋值给全局变量 `g_Device` 的函数指针成员 `pstatusChange`。

在 `run` 函数中,我们首先将 `g_Device` 的 `status` 变量赋值为 10。然后,如果 `status` 的值等于 10,就判断 `g_Device` 的函数指针成员 `pstatusChange` 不为空,然后调用这个函数并传递 `status` 的值作为参数。

在主程序中,我们定义了 `callback` 函数,它接收一个整型参数并输出这个参数的值。最后,在 `main` 函数中,我们通过调用 `addcallbackFunc` 函数,将 `callback` 函数的地址传递给它,作为回调函数。然后调用 `run` 函数,触发回调函数的执行。

这样,当 `run` 函数中的条件满足时,会调用注册的回调函数 `callback`,并传入相应的参数。在本例中,输出结果是 "status = 10"。

希望这个解释对你有帮助!如果你还有其他问题,欢迎继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

silver-crow 发表于 2024-3-18 08:09:26

人造人 发表于 2024-3-16 12:10


懂了,谢谢大佬
页: [1]
查看完整版本: 这个回调函数怎么实现的?