写入假定大小的数组会导致“上限不得省略......”

Chr*_*h90 5 fortran

我正在编写代码来添加一个闭源有限元框架,该框架迫使我(由于依赖一些旧的 F77 风格方法)在一处依赖假定大小的数组。

是否可以将假定大小的数组写入标准输出,无论其大小如何?

这是行不通的:

module fun

implicit none

contains

subroutine writer(a)
integer, dimension(*), intent(in) :: a
write(*,*) a
end subroutine writer

end module fun


program test
use fun
implicit none

integer, dimension(2) :: a

a(1) = 1
a(2) = 2

call writer(a)

end program test
Run Code Online (Sandbox Code Playgroud)

随着英特尔 Fortran 编译器抛出

error #6364: The upper bound shall not be omitted in the last dimension of a reference to an assumed size array.
Run Code Online (Sandbox Code Playgroud)

Vla*_*r F 3

编译器不知道假定大小的数组有多大。它只有第一个元素的地址。你有责任告诉它有多大。

 write(*,*) a(1:n)
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用显式大小的数组

integer, intent(in) :: a(n)
Run Code Online (Sandbox Code Playgroud)

然后你可以做

write(*,*) a
Run Code Online (Sandbox Code Playgroud)