我在这里遇到问题:
void DrawState(){
char statevar[1000] = {0};
//bla bla bla
something = showmenu(); // or showscreen() or showinput()
if(something){
// change state
state = new_state;
}else{
// return to previous state
state = return_state;
}
// draw new state here.
DrawState();
}
我需要在状态发生变化时运行此功能。但是当我以递归的方式写这样的内容时,它会占用太多内存并最终导致系统崩溃。当我不这样做时,我不知道如何从外面打电话给自己。
有人有任何想法吗?
编辑:这是一个在管理器软件上运行的库,如插件。后台工作也需要与此实现一起工作。也许我应该在某些事件上运行它。
答案 0 :(得分:2)
这听起来像你想要的不涉及递归本身,而只是简单的回调。
当代码中的某些内容发生变化时,如果需要运行某些代码,则需要实现Observer pattern。一个简单的C实现可能使用一个函数指针来保存在监视数据被更新时将运行的函数。
例如,您可以分离更新功能:
void DrawState() {
// ...
}
然后,你可以保持指向它的指针
int (*updateDraw)() = DrawState
然后做......
if (updated) {
// when updated
updateDraw()
}