微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试创建一个函数,它将存储和重复给定为特定时间或重复给定值的参数的另一个函数.
但是当你想传递一个函数作为参数时,你必须先掌握所有的参数.
如果我想将函数作为一个参数传递给函数,而另一个参数又如何呢?
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);
}

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

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

原文地址:https://www.jb51.cc/c/113300.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐