EXTERNAL is needed in a variety of situations:
- If you pass a subroutine name to a subroutine and there is no explicit interface (as was the case in FORTRAN 77), EXTERNAL makes it clear to the compiler a subroutine is meant.
- If you use a subroutine name with the same name as an intrinsic subroutine (Note that compilers can add intrinsics of their own, so potentially any subroutine that you write yourself could be in confict with the compiler or the next version of the compiler, unless you use EXTERNAL consistently).
EXTERNAL is not needed when there can be no confusion over the meaning of the name - a module procedure or a name appearing in an interface block.