gpt4 book ai didi

c - C中函数指针的递归声明

转载 作者:行者123 更新时间:2023-11-30 17:20:14 25 4
gpt4 key购买 nike

我想声明一个返回指向相同类型函数的指针的函数。

我想用它来实现如下所示的状态机:

typedef event_handler_t (*event_handler_t)(event_t*); // compilation error

event_handler_t state2(event_t* e);
event_handler_t state1(event_t* e) {
switch(e->type) {
//...
case SOME_EVENT:
return state2;
//...
}

}
event_handler_t state2(event_t* e) {
switch(e->type) {
//...
case OTHER_EVENT:
return state1;
//...
}
}

//...
event_handler_t event_handler;
//...
event_handler(&e);
//...

我设法使用如下结构解决编译错误:

typedef struct event_handler {
struct event_handler (*func)(event_t *);
} event_handler_t;

但这使得返回语句变得更加复杂:

event_handler_t state2(event_t* e) {
{
event_handler_t next_handler = {NULL};
switch(e->type) {
//...
case OTHER_EVENT:
next_handler.func = state1;
break;
//...
}
return next_handler;
}

我想知道是否有更好的方法在c中创建这样的函数指针。

最佳答案

在 C 中不可能做到这一点:函数无法返回指向自身的指针,因为类型声明递归扩展并且永无止境。有关说明,请参阅此页面:http://www.gotw.ca/gotw/057.htm

上页描述的解决方法意味着返回 void (*) () 而不是正确类型的函数指针;您的解决方法可以说更简洁一些。

关于c - C中函数指针的递归声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657794/

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