Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

EXTERNAL statement for subroutines: is it ever needed?

45 views
Skip to first unread message

deltaquattro

unread,
Apr 7, 2008, 7:53:46 AM4/7/08
to
Hi,

I don't understand the use of the EXTERNAL statement. When I call an
external subroutine from a program unit, it seems like the code
compiles without problems, even if the external subroutine is in
another file. So would I need EXTERNAL? Thanks,

Best Regards,

deltaquattro

Arjen Markus

unread,
Apr 7, 2008, 8:24:23 AM4/7/08
to

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.

Regards,

Arjen

FX

unread,
Apr 7, 2008, 8:24:41 AM4/7/08
to
> I don't understand the use of the EXTERNAL statement.

Look at the following code:

integer function merge(a,b,c)
integer a, b
logical c
merge = 12
end function merge

program test
external merge
print *, merge (1,2,.true.)
end

a. Compare what happens with and without the "external merge".
b. Now, take the version without "external merge". Run it with a Fortran
77-only compiler (g77 for example). Run it in with a Fortran 90
compiler. Compare the results.

--
FX

FX

unread,
Apr 7, 2008, 8:24:41 AM4/7/08
to
> I don't understand the use of the EXTERNAL statement.

Look at the following code:

integer function merge(a,b,c)
integer a, b
logical c
merge = 12
end function merge

program test
external merge
print *, merge (1,2,.true.)
end

a. With a Fortran 90 compiler, compare what happens with and without

Michael Metcalf

unread,
Apr 7, 2008, 8:43:25 AM4/7/08
to

"deltaquattro" <deltaq...@gmail.com> wrote in message
news:6c0307ab-b5ef-466b...@l42g2000hsc.googlegroups.com...
You would need it if your external had the same name as any intrinsic
procedure supported by your compiler ("Fortran 95/2003 Explained", p. 82).

Regards,

Mike Metcalf


0 new messages