我有个问题:

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();
}

我需要这个函数在状态改变时运行但是当我这样递归地写的时候,它消耗了太多的内存,最终导致系统崩溃当我不这样做的时候,我不知道如何从外面称呼自己。
有人知道吗?
编辑:这是一个运行在管理软件上的库,就像一个插件后台作业也需要使用此实现也许我应该在某个活动上做这个。

最佳答案

听起来你想要的并不是递归,而是简单的回调。
当您需要在代码中的内容发生更改时运行一些代码时,您需要实现Observer pattern一个简单的C实现可以使用一个函数指针来保存被监视数据更新时将要运行的函数。
例如,您可以分离更新功能:

void DrawState() {
    // ...
}

然后,你可以保持一个指向它的指针
int (*updateDraw)() = DrawState

然后。。。
if (updated) {
  // when updated
  updateDraw()
}

关于c - 防止不良和必要的递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15906118/

10-11 22:29
查看更多