0

おそらく、これには派手な用語があります。このコードがあるとしましょう:

void a(){
  b();
}

void b(){
  c();
}

void c(){
  a();
  // do something
  if (FLAG_COMPLETE){
      return;
  }
}

問題は、FLAG_COMPLETE が上がるまで a->b->c->a->b->c になることです。その後、これらすべての呼び出しをバックオーダーで追跡します。呼び出し先から呼び出し元関数への戻りを回避する方法はありますか? 私はアセンブリでこれを行うのが非常に簡単であることを知っています。

C++ CLI を使用しています。ループ内で関数を呼び出して、スタックのオーバーフローを回避したい。

4

1 に答える 1

1

a()行間を読むと、 、 then b()、 thenの内容を、が設定さc()れるまで永遠に実行したいように聞こえますか? FLAG_COMPLETEもしそうなら、それを明示的にしないのはなぜですか?

void RunUntilComplete()
{
    while(!FLAG_COMPLETE)
    {
        ContentsOfA();
        ContentsOfB();
        ContentsOfC();
    }
}
于 2012-08-14T22:02:26.400 に答える