- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The code below is missing a declaration "INTEGER :: I".
subroutine bsub implicit none integer :: ia(2) = [(i+2, i=2,3)] print *,(i,ia(i),i=1,2) end subroutine
Therefore, error messages and aborting of the compilation are expected. The 18.0.5 and 19.0.1 compilers say:
bsub.f90(3): error #6404: This name does not have a type, and must have an explicit type. integer :: ia(2) = [(i+2, i=2,3)] --------------------------^ bsub.f90(5): error #6404: This name does not have a type, and must have an explicit type. print *,(i,ia(i),i=1,2) ---------^ bsub.f90(5): error #6063: An INTEGER or REAL data type is required in this context. print *,(i,ia(i),i=1,2) -----------------^ bsub.f90(5): error #8251: An input item must not appear as the implied-DO variable of any implied-DO loop that contains the input item. print *,(i,ia(i),i=1,2) ---------^ compilation aborted for bsub.f90 (code 1)
The last error message would have been appropriate if the code had contained a READ statement with the same implied DO list as the PRINT statement.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I guess it is not that unusual though for an first error message to lead a cascade of consequential and often spurious messages.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steve,
Does the Fortran standard require the indexing variable of an implied DO loop to the declared (at all, much less than explicitly as integer)?
Jim Dempsey
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If IMPLICIT NONE is in effect, yes it does, the same as any other variable. Here is what the standard says for the implied DO in an array constructor:
The name of a data-i-do-variable in a DATA statement or an ac-do-variable in an array constructor has a scope of its data-implied-do or ac-implied-do. It is a scalar variable. If integer-type-spec appears in data-implied-do or ac-implied-do-control it has the specified type and type parameters; otherwise it has the type and type parameters that it would have if it were the name of a variable in the innermost executable construct or scoping unit that includes the DATA statement or array constructor, and this type shall be integer type. It has no other attributes. The appearance of a name as a data-i-do-variable of an implied DO in a DATA statement or an ac-do-variable in an array constructor is not an implicit declaration of a variable whose scope is the scoping unit that contains the statement.
The implied DO in the I/O statement is different in that it IS a variable in the enclosing scope, but you are still required to declare it if it wouldn't otherwise have an implicit integer type.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
See also the recent discussion by mecej4 on comp.lang.fortran :).
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page