## 8.5.3 Subroutines

A subroutine subprogram is invoked in a CALL statement or by a defined assignment statement, and does not return a particular value.

The SUBROUTINE statement is the initial statement of a subroutine subprogram. It takes the following form:

  [prefix] SUBROUTINE name [([d-arg-list])]
  prefix
  Is one of the following:

  Keyword | Meaning
  --- | ---
  RECURSIVE | Permits direct recursion to occur (see Section 8.5.1.1).
  PURE | Asserts that the procedure has no side effects (see Section 8.5.1.2).
  ELEMENTAL | Restricted form of pure procedure that acts on one array element at a time (see Section 8.4.1.3).

  You can also specify one of the High Performance Fortran (HPF) keywords (see Section 8.2). These keywords are functional only in parallel programs on Tru64 UNIX systems.

  name
  Is the name of the subroutine.
  d-arg-list
  Is a list of one or more dummy arguments or alternate return specifiers (*).

Rules and Behavior

A subroutine is invoked by a CALL statement or defined assignment. When a subroutine is invoked, dummy arguments (if present) become associated with the corresponding actual arguments specified in the call.

Execution begins with the first executable construct or statement following the SUBROUTINE statement. Control returns to the calling program unit once the END statement (or a RETURN statement) is executed.

A subroutine subprogram cannot contain a FUNCTION statement, a BLOCK DATA statement, a PROGRAM statement, or another SUBROUTINE statement. ENTRY statements can be included to provide multiple entry points to the subprogram.

Examples

The following example shows a subroutine:

    Main Program          Subroutine
    CALL HELLO_WORLD      SUBROUTINE HELLO_WORLD
    ...                   PRINT *, "Hello World"
    END                   END SUBROUTINE

The following example uses alternate return specifiers to determine where control transfers on completion of the subroutine:

    Main Program                          Subroutine
        CALL CHECK(A,B,*10,*20,C)             SUBROUTINE CHECK(X,Y,*,*,Q)
        TYPE *, 'VALUE LESS THAN ZERO'        ...
        GO TO 30                          50  IF (Z)  60,70,80
    10  TYPE*, 'VALUE EQUALS ZERO'        60  RETURN
        GO TO 30                          70  RETURN 1
    20  TYPE*, 'VALUE MORE THAN ZERO'     80  RETURN 2
    30  CONTINUE                              END
        ...

The SUBROUTINE statement argument list contains two dummy alternate return arguments corresponding to the actual arguments *10 and *20 in the CALL statement argument list.

The value of Z determines the return, as follows:

- If Z < zero, a normal return occurs and control is transferred to the first executable statement following CALL CHECK in the main program.
- If Z = = zero, the return is to statement label 10 in the main program.
- If Z > zero, the return is to statement label 20 in the main program.

(An alternate return is an obsolescent feature in Fortran 90 and Fortran 95.)

For More Information:

- On general rules that apply to subroutine subprograms, see Section 8.5.1.
- On the CALL statement, see Section 7.2.
- On argument keywords in subroutine references, see Section 7.2.
- On defined assignment, see Section 8.9.5.
- On the RETURN statement, see Section 7.9.
- On procedure arguments, see Section 8.8.
- On intrinsic subroutines, see Chapter 9.
- On the ENTRY statement, see Section 8.11.
- On obsolescent features in Fortran 90 and Fortran 95, see Appendix A.

Previous Page Next Page Table of Contents