![]() |
1
3
经典帕斯卡语中的goto规则是:
后者从未得到博尔兰衍生的帕斯卡语的支持,但第一种仍然有效。 所以你需要像Martin说的那样生成退出的代码,但可能是针对多个块级别的,所以你不能为每个goto生成一个可能的代码,而是必须生成代码(以精确地退出所需块的数量)。 典型的测试模式是使用goto退出多个嵌套的ifs(可能在一个循环中),因为这是一个经典的微优化,至少在D7之前更快。 请记住,if求值和分支的begin..end块可能生成了需要清理的temp。 ----------稍后添加 我认为codegenerator需要一种方法来遍历goto和它的端点之间的作用域,同时为块生成相关的退出代码。这样一来,修复程序就适用于一般情况,而不仅仅是本例。 既然你只能跳出范围,而不能跳进范围,那就没那么难了。
LGOTO1代码: //退出代码第一块 流行音乐 流行音乐 //退出代码第一块 流行音乐B 去真正的目的地
|
![]() |
2
1
简单的解决方案是: 当生成GOTO for GOTO语句时,在GOTO前面加上与RET之前相同的清除代码。 |
![]() |
3
1
|
![]() |
Kurogami · 错误C2059:语法错误:“}”C++ 7 年前 |
![]() |
Bhaskar Bhuyan · 如何在python中循环回特定点 8 年前 |
![]() |
Sneftel · 为什么在constexpr函数中不允许goto? 8 年前 |
![]() |
Mazhar Ali · 批处理文件系统在循环后找不到文件 8 年前 |
|
WhiteTail · 为什么“goto”被视为不好的形式? 8 年前 |
|
Trevor Thorpe · 这是使用goto的安全方式吗? 8 年前 |
![]() |
AkiEru · PHP正在摆脱“if”条件并继续下一部分 10 年前 |
|
djj19 · Rainflow算法-Fortran到Matlab的转换 11 年前 |