gpt4 book ai didi

使用回调调用两个函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:20 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

typedef void (*tstart)(void);
typedef void (*tstop)(void);
static tstart cbstart = NULL;
static tstart cbstop = NULL;

void init(tstart st,tstop stp)
{
printf("in_init_func\n");
sleep(5);
cbstart = st;

sleep(5);
cbstop = stp;
}

void start()
{
printf("in_start_func\n");
}

void stop()
{
printf("in_stop_func\n");
}

int main()
{
init(start,stop);
}

我一直在尝试通过回调从一个函数调用两个函数结果,我得到了低于结果。

$ ./a.exein_init_func

最佳答案

在您的程序中,您只是分配函数地址 start()stop()到他们各自的回调cbstartcbstopinit()函数,但不使用它们来调用相应的函数。

此外,您不需要传递函数地址 start()stop()init()功能。自 start()stop()函数定义在这个翻译单元中是可见的,你只需要在 init() 之前声明它们.

#include <stdio.h>

typedef void (*tstart)(void);
typedef void (*tstop)(void);
static tstart cbstart = NULL;
static tstop cbstop = NULL;

void start();
void stop();

void init()
{
printf("in_init_func\n");
cbstart = start;
cbstop = stop;
}

void start()
{
printf("in_start_func\n");
}

void stop()
{
printf("in_stop_func\n");
}

int main()
{
init();
if (cbstart)
cbstart();
if (cbstop)
cbstop();
return 0;
}

init() 之后,取消引用时,cbstart可用于调用函数 start()cbstop可用于调用函数 cbstop .

关于使用回调调用两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46946729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com