The RETURN statement transfers control from a subprogram to the program that called the subprogram. You can only use RETURN in a subprogram unit.
The RETURN statement takes the following form:
RETURN [i]
The optional argument i indicates an alternate return from the subprogram. It can be specified only in subroutine subprograms, not in function subprograms. The value of i specifies that the ith alternate return in the actual argument list is to be taken (see the second example that follows in this section).
When a RETURN statement is executed in a function subprogram, control is returned to the calling program at the statement that contains the function reference (see Chapter 6). When a RETURN statement is executed in a subroutine, control is returned either to the first executable statement following the CALL statement that initiated the subroutine, or to the statement label that was specified as the ith alternate return in the CALL argument list.
In the first example, control is returned to the calling program at the first executable statement following the CALL CONVRT statement.
SUBROUTINE CONVRT(N,ALPH,DATA,PRNT,K) INTEGER ALPH(*), DATA(*), PRNT(*) IF (N .GE. 10) THEN DATA(K+2) = N-(N/10)*N N = N/10 DATA(K+1) = N PRNT(K+2) = ALPH(DATA(K+2)+1) PRNT(K+1) = ALPH(DATA(K+1)+1) ELSE PRNT(K+2) = ALPH(N+1) END IF RETURN END
The second example shows how alternate returns can be included in a subroutine.
SUBROUTINE CHECK(X,Y,*,*,C) . . . 50 IF (Z) 60,70,80 60 RETURN 70 RETURN 1 80 RETURN 2 END
Depending on the computed value of Z, one of the following returns occur:
Control returns to the statement specified as the first or second alternate return argument in the CALL statement argument list; for example, the CALL statement might take the following form:
CALL CHECK(A,B,*10,*20,C)
In this case, RETURN 1 transfers control to statement label 10 and RETURN 2 transfers control to statement label 20.
If a subroutine includes an alternate return specifying a value less than 1 or greater than the number of alternate return arguments, control returns to the next executable statement after the CALL statement (alternate returns are ignored). You should therefore ensure that the value of i is within the range of alternate return arguments.