Purpose
The SUBROUTINE statement is the first statement of a subroutine subprogram.
Syntax
.------------. V | >>---+--------+-+--SUBROUTINE--name-----------------------------> '-prefix-' >--+-------------------------------+----------------------------> '-(--+---------------------+--)-' '-dummy_argument_list-' >--+------------------------------------------------+---------->< '-BIND--(--C--+-----------------------------+--)-' '-,--NAME-- = --binding_label-' |
+------------------------Fortran 2003 Draft Standard-------------------------+
+---------------------End of Fortran 2003 Draft Standard---------------------+
Rules
At most one of each kind of prefix can be specified.
The subroutine name cannot appear in any other statement in the scope of the subroutine, unless recursion has been specified.
The RECURSIVE keyword must be specified if, directly or indirectly,
If the RECURSIVE keyword is specified, the procedure interface is explicit within the subprogram.
+---------------------------------Fortran 95---------------------------------+
Using the PURE or ELEMENTAL prefix indicates that the subroutine may be invoked by the compiler in any order as it is free of side effects.For elemental procedures, the keyword ELEMENTAL must be specified. If the ELEMENTAL keyword is specified, the RECURSIVE keyword cannot be specified.
+-----------------------------End of Fortran 95------------------------------+
+-------------------------------IBM Extension--------------------------------+
You can also call external procedures recursively when you specify the -qrecur compiler option, although XL Fortran disregards this option if the SUBROUTINE statement specifies the RECURSIVE keyword.
+----------------------------End of IBM Extension----------------------------+
+------------------------Fortran 2003 Draft Standard-------------------------+
The BIND keyword implicitly or explicitly defines a binding label by which a procedure is accessed from the C programming language. A binding label cannot be specified for a dummy argument. A dummy argument cannot be zero-sized. A dummy argument for a procedure with the BIND attribute must have interoperable type and type parameters and cannot have the ALLOCATABLE, OPTIONAL, or POINTER attribute.
The BIND attribute must not be specified for an internal procedure.
+---------------------End of Fortran 2003 Draft Standard---------------------+
RECURSIVE SUBROUTINE SUB(X,Y) INTEGER X,Y IF (X.LT.Y) THEN RETURN ELSE CALL SUB(X,Y+1) END IF END SUBROUTINE SUB
Related Information