



SAVE Statement
SAVE is a specification statement which can be used to ensure that variables and
arrays used within a procedure preserve their values between successive calls to the
procedure. Under normal circumstances local items will become "undefined" as soon
as the procedure returns control to the calling unit. It is often useful to store the
values of certain items used on one call to avoid doing extra work on the next. For
example:
SUBROUTINE EXTRA(MILES) INTEGER MILES, LAST SAVE LAST DATA LAST /0/ WRITE(UNIT=*, FMT=*) MILES - LAST, ' more miles.' LAST = MILES END |
MILES each time and
subtracts it from the next one, so that it can print out the incremental value. The
value of LAST had to be given an initial value using a DATA statement in order to
prevent its use with an undefined value on the initial call.
Local variables and arrays and complete named common blocks can be saved
using SAVE statements, but not variables and arrays which are dummy arguments or
which appear within common blocks.
Items which are initially defined with a DATA statement but which are never
updated with a new value do not need to be saved.
The SAVE statement has two alternative forms:
SAVE item, item, ... item
SAVE
Where each item can be a local variable or (unsubscripted) array, or the name of a
common block enclosed in slashes. The second form, with no list of items, saves all
the allowable items in the program unit. This form should not be used in any
program unit which uses a common block unless all common blocks used in that
program unit are also used in the main program or saved in every program unit in
which it appears. The SAVE statement can be used in the main program unit (so that
it could be packaged with other specifications in an INCLUDE file) but has no
effect.
Many current Fortran systems have a simple static storage allocation scheme in
which all variables are saved whether SAVE is used or not. But on small computers
which make use of disc overlays, or large ones with virtual memory systems, this may
not be so. You should always take care to use the SAVE statement anywhere that its
use is indicated to make your programs safe and portable. Even where it is at present
strictly redundant it still indicates to the reader that the procedure works
by retaining information from one call to the next, and this is valuable in
itself.