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

 

 

publicaciones de 3 / 0 nuevos
Último envío
Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.
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).

Deje un comentario

Por favor inicie sesión para agregar un comentario. ¿No es socio? Únase ya