FORTRAN 块数据似乎不起作用

FORTRAN block data seems to not be working

我正在处理一些遗留代码,这些代码严重依赖于使用 BLOCK DATA 初始化的公共块,类似于下面的代码。

       BLOCK DATA filename
       PARAMETER (size=100)
       CHARACTER*8 somearray(size)
       COMMON /block1/ somearray

       DATA(somearray(i), i=100)/ 
      *'string1', 'string2', ... , 'string100'/

       END

在程序的某个时刻,一个子例程使用了这个公共块,如下面的代码所示。

       SUBROUTINE SUB(array)

       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
       CHARACTER*8 array(*), somearray(100)

       COMMON /block1/ somearray

       DO 100 I=1, iterations
       array(I)=somearray(I)
       ...
  100  CONTINUE
       END

此处 somearray 在每个字符串中有几个空格,而不是 BLOCK DATA 中指定的实际值。这可能是什么原因造成的?

:代码是用Intel Fortran编译的

我通过在任何 BLOCK DATAEND 语句之前添加 SAVE 语句找到了解决此问题的方法,如下所示。

   BLOCK DATA filename
   PARAMETER (size=100)
   CHARACTER*8 somearray(size)
   COMMON /block1/ somearray

   DATA(somearray(i), i=100)/ 
  *'string1', 'string2', ... , 'string100'/
   SAVE
   END