Trying to refresh my Fortran 90 knowledge for a project, I have run into some oddity when using internal files. Consider the example code:
! ---- internal_file_confusion.f90 ----
program internal_file_confusion
implicit none
character*40 :: string1
character :: string2(40)
write(string1, *) "Hello World 1"
write(*,*) "string1 = ", string1
write(string2, *) "Hello World 2"
write(*,*) "string2 = ", string2
end program
which when compiled with gfortran
crashes, writing to STDOUT
string1 = Hello World 1
At line 10 of file e:/Daten/tmp/fortran-training/internal_file_confusion.f90
Fortran runtime error: End of record
When declared with the *length
notation the character array can be used for internal write, but not when declared with the name(length)
notation. Furthermore I noticed that the *length
notation seems to be allowed only for character arrays, while it is forbidden with an error message like
Error: Old-style type declaration INTEGER*40 not supported at (1)
for other data types.
What is the difference between these notations and why does it affect use as internal files?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…