The EXTERNAL attribute specifies that a name represents an external procedure, a dummy procedure, or a block data program unit. A procedure name with the EXTERNAL attribute can be used as an actual argument.
>>-EXTERNAL--+-----+--name_list-------------------------------->< '- ::-'
If an external procedure name or dummy argument name is used as an actual argument, it must be declared with the EXTERNAL attribute or by an interface block in the scoping unit, but may not appear in both.
If an intrinsic procedure name is specified with the EXTERNAL attribute in a scoping unit, the name becomes the name of a user-defined external procedure. Therefore, you cannot invoke that intrinsic procedure by that name from that scoping unit.
You can specify a name to have the EXTERNAL attribute appear only once in a scoping unit.
A name in an EXTERNAL statement must not also be specified as a specific procedure name in an interface block in the scoping unit.
|Attributes Compatible with the EXTERNAL Attribute|
PROGRAM MAIN EXTERNAL AAA CALL SUB(AAA) ! Procedure AAA is passed to SUB END SUBROUTINE SUB(ARG) CALL ARG() ! This results in a call to AAA END SUBROUTINE