递归函数中的 GOTO 指令

GOTO instruction in recursive functions

本文关键字:指令 GOTO 递归函数      更新时间:2023-10-16

如果我在递归函数中使用 goto 指令(想在函数自然完成之前退出函数(,堆栈是否自动释放?

不,据我所知,大多数编译器不会退出当前函数。

如果您必须直接从深度递归转义throw exception (C++( 或使用longjmp (C(,这些操作将恢复堆栈。

考虑下面的程序,其中有一个用于最终返回的 goto 语句。仅仅通过看到goto就可以释放堆栈吗?因此,即使您使用goto内部函数堆栈也会保持这样。

#include <stdio.h>
int fact(int a)
{   
    if(a==1)
        goto A;
    return a*fact(a-1);
    A: return a;
}
int main()
{
    printf("%d",fact(10));
}

不能在标准C++中使用 goto 从一个函数跳转到另一个函数。从 C++ 语言标准的 $6.6.4/1 起

goto 语句无条件地将控制权移交给语句 由标识符标记。标识符应为标签 (6.1( 位于当前函数中。

。或标准 C. 从 C 语言标准的 $6.8.6.1/1 起

goto 语句中的标识符应命名位于 在封闭函数中的某个地方。转到语句不得跳转 从具有可变修改的标识符的范围之外 键入 to 在该标识符的范围内。