使用回调调用两个函数 #包括 #包括 #包括 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() { 初始化(启动、停止); }

使用回调调用两个函数 #包括 #包括 #包括 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

我一直试图通过回调从一个函数调用两个函数 结果,我的成绩低于预期

$./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 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;
}