小编Ded*_*tos的帖子

零大小的数组和数组边界检查

当使用GNU Fortran(v4.4.3)或Sun Studio F95(v8.3)进行编译且没有数组界限时,检查以下程序是否正确运行。但是,当分别打开数组边界检查(gfortran -fbounds-checkf95 -C)时,GNU编译的可执行文件将再次运行而不会出现错误,而Sun Studio编译的可执行文件会给出运行时错误,

 ******  FORTRAN RUN-TIME SYSTEM  ******
Subscript out of range. Location:  line 44 column 20 of 'nosize.f90'
Subscript number 2 has value 1 in array 't$27'
Run Code Online (Sandbox Code Playgroud)

这是对的错误,该调用sub2()使用的自动数组虚拟参数x。该sub1()呼叫运行罚款或者编译器和任何标志。

据我所知,该程序是“合法的”,因为零大小的数组可以像非零大小的数组一样被引用,并且没有零长度维的显式索引x。但是,我在这里缺少一些零尺寸的数组切片或自动数组的微妙之处吗?我是否应该期望数组边界检查在不同的编译器中表现相同,还是应该将其视为特定于供应商的扩展?

MODULE subs
  IMPLICIT NONE
CONTAINS    
  SUBROUTINE sub1(x)
    IMPLICIT NONE
    REAL :: x(:,:)
    PRINT*,'------------------------------------'
    PRINT*,SHAPE(x)
    PRINT*,SIZE(x)
  END SUBROUTINE sub1

  SUBROUTINE sub2(n1,n3,x)
    IMPLICIT NONE
    INTEGER,INTENT(in) :: n1, n3
    REAL :: x(n1,n3)
    PRINT*,'------------------------------------'
    PRINT*,SHAPE(x)
    PRINT*,SIZE(x)
  END SUBROUTINE …
Run Code Online (Sandbox Code Playgroud)

fortran gfortran sunstudio

5
推荐指数
1
解决办法
5202
查看次数

标签 统计

fortran ×1

gfortran ×1

sunstudio ×1