加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:如何将函数(不知道其参数)传递给另一个函数?

发布时间:2020-12-16 06:43:36 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个函数,它将存储和重复给定为特定时间或重复给定值的参数的另一个函数. 但是当你想传递一个函数作为参数时,你必须先掌握所有的参数. 如果我想将函数作为一个参数传递给函数,而另一个参数又如何呢? void AddTimer(float time,int repeats,vo
我正在尝试创建一个函数,它将存储和重复给定为特定时间或重复给定值的参数的另一个函数.
但是当你想传递一个函数作为参数时,你必须先掌握所有的参数.
如果我想将函数作为一个参数传递给函数,而另一个参数又如何呢?
void AddTimer(float time,int repeats,void (*func),params); // I know params has no type and that (*func) is missing parameters but it is just to show you what I mean

提前致谢

解决方法

就现代C而言,dribeas的答案是正确的.

为了感兴趣,C世界还有一个简单的低科技解决方案,尽管如此,它在C工作.而不是允许任意参数,将函数定义为void(* func)(void *),并使“params”为void *.调用者的工作就是定义一些包含参数的结构体,并管理其生命周期.通常调用者也将为真正需要调用的函数编写一个简单的包装器:

void myfunc(int,float); // defined elsewhere

typedef struct {
    int foo;
    float bar;
} myfunc_params;

void myfunc_wrapper(void *p) {
    myfunc_params *params = (myfunc_params *)p;
    myfunc(params->foo,params->bar);
}

int main() {
    myfunc_params x = {1,2};
    AddTimer(23,5,myfunc_wrapper,&x);
    sleep(23*5 + 1);
}

实际上你想要“点火和忘记”计时器,所以如果你使用这个方案,你可能还需要一种方法,一旦所有的启动完成,定时器就可以释放用户数据指针.

显然这种类型安全性有限.原则上应该不重要,因为提供函数指针和用户数据指针的人不应该有很大的困难,确保它们匹配.实际上,当然人们会发现编写错误的方法,以及如何责怪你,因为他们的编译器没有告诉他们有关错误;-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读