问题描述
考虑以下代码
program main
implicit none
integer,dimension(:),allocatable :: a
allocate(a(2))
call test(a,a)
contains
subroutine test(a1,a2)
integer,dimension(3),intent(in) :: a1
integer,intent(in) :: a2
write(*,*) size(a1,dim=1),size(a2,dim=1)
end subroutine test
end program main
Gfortran编译时没有错误。输出为3 2
。如您所见,声明伪参数的大小会削弱程序查看实际参数的大小的能力。
想象一下如果intent
为inout
会带来什么后果。它将导致意外和随机的运行时错误,具体取决于函数覆盖的内存部分。这种错误真的很难调试。
-
这是预期的行为还是应该在编译器中修复的问题?
-
如果这是预期的行为,那么声明虚拟参数的大小不是一种不好的做法吗?通常,我们应该使用
:
还是0:
并显式检查数组大小吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)