递归函数中的 GOTO 指令
GOTO instruction in recursive functions
如果我在递归函数中使用 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 在该标识符的范围内。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++:对不存在的命名空间使用命名空间指令
- 函数名是c中该函数的第一条指令的地址吗
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 错误:无效的预处理指令 #i 的意思是 #if?
- 组装指令中乘法的下部和上部是什么
- 如何正确指定 goto 语句的标签?
- OpenMP 与有序和关键指令并行
- C++中的移动分配出现问题.非法指令: 4.
- 嵌套命名空间的"using"指令,但需要命名内部命名空间
- ANTLR GOTO statement
- 为什么我的功能在使用 goto 时会给我带来"expected primary-expression before '}' token"?
- C++CMake编译指令与
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- AVX 指令中寄存器和指针之间的客观差异
- while 循环 c++ 中的非法指令
- 如何在编译时定义C++预处理器指令的值?
- 递归函数中的 GOTO 指令