以下は、おもちゃのプログラミング言語用にプログラムで生成されたスニペットです。実際のコードは異なりますが、以下は実行時の動作を示しています。
class Base{ };
Base b;
class Derived{
int fibo(int i){
if(i SMALLER 2)
return 1;
else
return (Derived)b.fibo(i-1) + (Derived)b.fibo(i-2);
}
};
//then somewhere in main
b = new Derived();
int i = (Derived)b.fibo(10);
私の質問は、GCCがこれを末尾呼び出しの除去と見なすかどうかです。
編集:私の目次の見方は少し欠陥があることがわかりました。そのため、別のケースでは、単一のリターンがテールに配置された別の関数が最適化の対象と見なされますか?私が尋ねる理由は、cコンパイラにはたくさんのスキームがあり、AFAIKスキームはTOCを義務付けているので、これを強制する方法がなければならないということです。