同时在维度 attr-spec 和 entity-decl 中声明 array-spec

Declaring array-spec in the dimension attr-spec and in entity-decl at the same time

此代码在 gfortran、Intel Fortran 和 Solaris Studio 中编译

  real, dimension(:) :: A(2)
  print *, size(A)
end

结果是2。

但是,当另一个 array-spec 在维度语句中尝试时

  dimension A(1)
  real :: A(2)
  print *, size(A)
end

所有三个编译器都发出错误,指出维度属性被赋予了两次。

第一个代码标准是否符合标准以及标准(尽可能最新)对这种情况的具体说明是什么?

标准说:

  • 类型声明语句中实体的数组规范覆盖同一语句中的任何 DIMENSION(...) 属性规范 (F2018 8.2p2) , 在确定语句指定什么作为实体的属性时。

  • 一个属性不能指定两次(F2018 C815)。

第一个程序符合标准,行为符合标准;第二个不是,给定 C815。

这些规则从 Fortran 90 开始应用。C815 的等价物也在 F77 中,F66 在特征上是模棱两可的...