来自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
中,既然它可以在S1
或S2
处终止,为什么它是单出口呢?
您能提供不是单项的声明吗?
您能给出不是单次退出的声明吗?
答案 0 :(得分:1)
在许多语言中,唯一没有单个条目的语句是那些恰好包含与位于它们外部的goto
或switch
语句一起使用的标签的语句,而只有一个没有该条目的语句具有单个出口的出口是包含goto
到外部位置,触发异常或以其他方式强制退出堆栈的出口。请注意,对于任何函数的 specific 调用,唯一的“正常”退出点将是紧随该调用之后的代码。
对于从未使用过不使用这种方法的代码的人来说,单次进入/单次退出的概念可能不清楚。当为诸如Atari 2600之类的平台编写代码时,可以找到后者的示例,在这些平台上,RAM空间通常非常宝贵。如果将从显示标题屏幕的代码或从游戏逻辑内部调用一段代码,而又不能负担一个子例程调用指令所需的两个字节的堆栈空间,那么这并不罕见。跳转到代码(而不是使用“ JSR”(跳转到子例程)指令),并通过检查游戏是否在进行中并跳回到“显示标题屏幕”或“执行游戏逻辑”代码。如果有必要从代码的更多位置调用它,那么这种设计可能很难维护,但是如果RAM确实很紧凑(例如,如Atari 2600那样,总共只有128个字节),则这种技术可能是必需的。 / p>