Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
17 Views

initialize Variable in declaration section of a Subroutine

When I initialize a Variable in a Subroutine within the declaration section, the initialization is just executed in the first run of the Subroutine. In the second run, the old (saved?) value is used.
As a minimal example I have the following code with the output 1 and 5 instead of two times the 1.
Does someone understand this feature?



Program Test
Implicit none

Call Sub1( )
Call Sub1( )

contains

   Subroutine Sub1( )
   Implicit None
   Integer*4 :: j1=1
   Print*, j1
   j1=5
   End Subroutine Sub1

End Program Test

 

 

0 Kudos
2 Replies
Highlighted
Beginner
17 Views

When I initialize a Variable

Sorry for the wrong formatting! The text again:

When I initialize a Variable in a Subroutine within the declaration section,
the initialization is just executed in the first run of the Subroutine.
In the second run, the old (saved?) value is used.
As a minimal example I have the following code with the output 1 and 5
instead of two times the 1.
Does someone understand this feature?
0 Kudos
Highlighted
Black Belt
17 Views

The initializer has effect

The initializer has effect only the first time.  This has been a feature of the standard since this form of initializer was adopted (f90).  Declaring with initializer also has the effect of SAVE, so the value upon leaving the procedure remains visible on reentry.  Using the non-standard extension integer*4 doesn't make the compiler revert partially to the behavior of some compiler from the early days of this extension. If you set a -stand option, you should get a warning (but not about the compiler not mimicking an old extended Fortran 66 behavior).

0 Kudos