在声明Fortran不良做法中伪参数的大小元素数

问题描述

考虑以下代码

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。如您所见,声明伪参数的大小会削弱程序查看实际参数的大小的能力。

想象一下如果intentinout会带来什么后果。它将导致意外和随机的运行时错误,具体取决于函数覆盖的内存部分。这种错误真的很难调试。

  1. 这是预期的行为还是应该在编译器中修复的问题?

  2. 如果这是预期的行为,那么声明虚拟参数的大小不是一种不好的做法吗?通常,我们应该使用:还是0:并显式检查数组大小吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)