initialize Variable in declaration section of a Subroutine

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

 

 

3 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.
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?

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).

Leave a Comment

Please sign in to add a comment. Not a member? Join today