回 帖 发 新 帖 刷新版面

主题:如题,当数组维数是变量的时候,COMMON如何使用?

如题,当数组维数是变量的时候,COMMON如何使用?比如:
程序1,
      program main
      implicit double precision (A-H)

      integer i
      i=3
      call bbb(i)
      end

      subroutine bbb(i)
      implicit double precision (A-H)
      common bb(i)
      end

程序2
      program main
      implicit none

      integer i
      i = 3 
      call bbb(i)
      end

      subroutine bbb(i)
      integer i,bb
      dimension bb(i)
      end

2个程序对比,第一个编译不通过,第二个可以通过,总之我想实现的功能就是子程序里的全局变量bb(i)的维数是由主程序里的i决定的。

有没有什么好的方法解决这个问题呢?第二个程序(dimesion)说明用函数参数传递是可以实现,但是程序改动比较大,因为我还是希望保留全局变量,所以不倾向于第二种写法,为什么用了common就会报错呢?
所以请教各位有没有什么好的方法既能保留common全局变量的功能又能实现我想要的功能(维数随着主程序的i变化)?

回复列表 (共3个回复)

沙发

1.应该尽量避免使用 common,这是一个不推荐的用法。

2.它无法实现你想要的功能。因为 common 在公共区开辟空间,它只能是固定大小的。

3.可以使用 module 和 allocatable 这样的新语法。

板凳


谢谢你的回答,那我悲催了,程序要大兴土木了。很久以前的程序,module,allocate你确定能够实现我的功能?

3 楼

当然确定,我每天的工作就是使用它们

我来回复

您尚未登录,请登录后再回复。点此登录或注册