当大多数编程以汇编语言,FORTRAN或COBOL完成时,将编写“单入口,单出口”。它被广泛误解了,因为现代语言不支持Dijkstra所警告的做法。
“单一入口”表示“不为功能创建替代入口点”。当然,使用汇编语言,可以在任何指令中输入功能。FORTRAN通过以下ENTRY
语句支持功能的多个条目:
SUBROUTINE S(X, Y)
R = SQRT(X*X + Y*Y)
C ALTERNATE ENTRY USED WHEN R IS ALREADY KNOWN
ENTRY S2(R)
...
RETURN
END
C USAGE
CALL S(3,4)
C ALTERNATE USAGE
CALL S2(5)
“单退出”意味着一个函数只能返回到一处:该语句立即呼叫以下。这并不意味着一个函数只能从一个地方返回。当结构化编程是书面的,它是常见的做法如下功能通过返回到备用位置指示错误。FORTRAN通过“备用回报”支持此操作:
C SUBROUTINE WITH ALTERNATE RETURN. THE '*' IS A PLACE HOLDER FOR THE ERROR RETURN
SUBROUTINE QSOLVE(A, B, C, X1, X2, *)
DISCR = B*B - 4*A*C
C NO SOLUTIONS, RETURN TO ERROR HANDLING LOCATION
IF DISCR .LT. 0 RETURN 1
SD = SQRT(DISCR)
DENOM = 2*A
X1 = (-B + SD) / DENOM
X2 = (-B - SD) / DENOM
RETURN
END
C USE OF ALTERNATE RETURN
CALL QSOLVE(1, 0, 1, X1, X2, *99)
C SOLUTION FOUND
...
C QSOLVE RETURNS HERE IF NO SOLUTIONS
99 PRINT 'NO SOLUTIONS'
这两种技术都很容易出错。使用备用条目通常会使一些变量未初始化。使用替代返回有一个GOTO语句的所有问题,另外一个复杂的问题是分支条件不是与分支相邻,而是在子例程中的某个位置。