使用回调调用两个函数 #包括 #包括 #包括 typedef void(*tstart)(void); 类型定义无效(*tstop)(无效); 静态tstart cbstart=NULL; 静态tstart cbstop=NULL; 无效初始化(tstart st、tstop stp) { printf(“in_init_func\n”); 睡眠(5); cbstart=st; 睡眠(5); cbstop=stp; } void start() { printf(“in_start_func\n”); } 无效停止() { printf(“in_stop_func\n”); } int main() { 初始化(启动、停止); }
我一直试图通过回调从一个函数调用两个函数 结果,我的成绩低于预期 $./a.exe使用回调调用两个函数 #包括 #包括 #包括 typedef void(*tstart)(void); 类型定义无效(*tstop)(无效); 静态tstart cbstart=NULL; 静态tstart cbstop=NULL; 无效初始化(tstart st、tstop stp) { printf(“in_init_func\n”); 睡眠(5); cbstart=st; 睡眠(5); cbstop=stp; } void start() { printf(“in_start_func\n”); } 无效停止() { printf(“in_stop_func\n”); } int main() { 初始化(启动、停止); },c,callback,C,Callback,我一直试图通过回调从一个函数调用两个函数 结果,我的成绩低于预期 $./a.exe 在_init_func中,您需要调用这些函数。将init()更改为 #include <stdio.h> #include <stdlib.h> #include <unistd.h> typedef void (*tstart)(void); typedef void (*tstop)(void); static tstart cbstart = NULL; static
在_init_func中,您需要调用这些函数。将
init()
更改为
#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);
}
您还可以删除
cbstart
和cbstop
声明,除非它们将在其他地方使用。在您的程序中,您只需将函数start()
和stop()
的地址分配给init()中各自的回调cbstart
和cbstop
函数,但不使用它们调用相应的函数
此外,您不需要将函数start()
和stop()
的地址传递给init()
函数。由于start()
和stop()
函数定义在此翻译单元中可见,因此您只需在init()
之前声明它们
#包括
typedef void(*tstart)(void);
类型定义无效(*tstop)(无效);
静态tstart cbstart=NULL;
静态tstop cbstop=NULL;
void start();
无效停止();
void init()
{
printf(“in_init_func\n”);
cbstart=开始;
cbstop=停止;
}
void start()
{
printf(“in_start_func\n”);
}
无效停止()
{
printf(“in_stop_func\n”);
}
int main()
{
init();
如果(cbstart)
cbstart();
如果(顶部)
cbstop();
返回0;
}
在
init()
之后,当取消引用时,cbstart
可用于调用函数start()
,cbstop
可用于调用函数cbstop在不调用这些函数的任何地方都不会调用它们,请使用cbstart();cbstop()代码>在main
中的init
行之后,您要做的就是在休眠一段时间后,将一些函数指针分配给一些全局变量。它正在做它应该做的事情:什么都没有。我明白了。
void init(tstart st,tstop stp)
{
printf("in_init_func\n");
sleep(5);
st();
sleep(5);
stp();
}
#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;
}