我正在编写代码来添加一个闭源有限元框架,该框架迫使我(由于依赖一些旧的 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)
编译器不知道假定大小的数组有多大。它只有第一个元素的地址。你有责任告诉它有多大。
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)