- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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).

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page