鱼C论坛

 找回密码
 立即注册
查看: 777|回复: 3

[已解决]这个回调函数怎么实现的?

[复制链接]
发表于 2024-3-16 11:48:54 | 显示全部楼层 |阅读模式
5鱼币
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-3-18 08:09:26 | 显示全部楼层

懂了,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-8 12:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表