“单次入境”和“单次出口”对一条陈述意味着什么?

时间:2019-07-01 21:18:10

标签: loops conditional-statements programming-languages control-structure

来自An Integrated Approach to Software Engineering By Pankaj Jalote

  

很显然,没有任何有意义的程序可以作为简单的序列来编写   没有分支或重复的语句(也涉及   分枝)。因此,如何使控制流线性化   要实现??通过使用结构化构造。在   结构化编程,一条语句不是简单的任务   声明,它是一个结构化的声明。一个的关键属性   结构化声明是它具有单项和   单次退出。也就是说,在执行期间,(结构化)语句的执行从一个定义的点开始,然后执行   在一个定义的点终止。一次入境和一次出境   语句,我们可以将程序视为(结构化)序列   陈述。如果所有语句都是结构化语句,则   在执行期间,这些语句的执行顺序将   与程序文本中的顺序相同。因此,通过使用   单项和单项退出语句之间的对应关系   可以获得静态和动态结构。

     

最常用的单项和单项退出语句

Selection: if B then S1 else S2
if B then S1

Iteration: While B do S
repeat S until B

Sequencing: S1; S2; S3;...

在结构化陈述中“单次入境”和“单次出口”是什么意思?

为什么最后列出的语句是单项和单项退出? 例如,在if B then S1 else S2中,既然它可以在S1S2处终止,为什么它是单出口呢?

您能提供不是单项的声明吗?

您能给出不是单次退出的声明吗?

1 个答案:

答案 0 :(得分:1)

在许多语言中,唯一没有单个条目的语句是那些恰好包含与位于它们外部的gotoswitch语句一起使用的标签的语句,而只有一个没有该条目的语句具有单个出口的出口是包含goto到外部位置,触发异常或以其他方式强制退出堆栈的出口。请注意,对于任何函数的 specific 调用,唯一的“正常”退出点将是紧随该调用之后的代码。

对于从未使用过不使用这种方法的代码的人来说,单次进入/单次退出的概念可能不清楚。当为诸如Atari 2600之类的平台编写代码时,可以找到后者的示例,在这些平台上,RAM空间通常非常宝贵。如果将从显示标题屏幕的代码或从游戏逻辑内部调用一段代码,而又不能负担一个子例程调用指令所需的两个字节的堆栈空间,那么这并不罕见。跳转到代码(而不是使用“ JSR”(跳转到子例程)指令),并通过检查游戏是否在进行中并跳回到“显示标题屏幕”或“执行游戏逻辑”代码。如果有必要从代码的更多位置调用它,那么这种设计可能很难维护,但是如果RAM确实很紧凑(例如,如Atari 2600那样,总共只有128个字节),则这种技术可能是必需的。 / p>