子程序很少会有一个以上的进入点,相对的,有时子程序会有一个以上的结束点,表示剩下的程序不需执行,或因为一些原因,造成无法执行后续的程序。
以下是是一个由档案中读取资料并处理的程序范例:
open file;
while (reading not finished) {
read some data;
if (error) {
stop the subprogram and inform rest of the program about the error;
}
}
process read data;
finish the subprogram;
其中“stop and inform”的步骤可以利用多种方式达成,包括产生一个异常(exception)、利用return指令回到上一层的程序、使用配合标记的break指令,或是使用goto。当子程序有二个结束点时,就违背了戴克斯特拉的结构化编程原则。但此情形下若强制要撰写只有一个结束点的子程序又相当麻烦,而且若有几个不同的错误处理,错误产生后有不同的清除方式,单一结束点的程序会相当难以阅读及理解,甚至比未结构化使用goto的程序相当。
许多编程语言就提供了在结构化编程中产生多个结束点的方式。C语言允许使用go指令来产生结构的多个结束点,C 还可以用throw产生异常,在结构外再用catch进行异常的处理,有些语言则有配合标记的break指令(类似一般的break指令,但可以跳出不只一层的结构)。
有些程序(例如语法分析器或是处理通讯协定的程序)有许多的状态(英语:state (computer science)),因此程序进行的过程会在各状态中切换,此架构不容易简化成基本的控制结构。可以将此架构各状态下的程序分别独立为子程序,再用一个变量表示当前的状态,(可参考trampoline(英语:trampoline (computers))),另一种作法是用goto的方式切换到新状态对应的程序。2100433B