如何避免Fortran 90或更高版本中的全局变量?

时间:2013-09-26 23:04:39

标签: design-patterns global-variables fortran fortran90

我有一个fortran库,我必须使用非常特定的格式传递函数。然后该库正在对我的函数进行一些操作。该函数由用户(像我一样)编写,并且该库是理所当然的。

不幸的是,为了计算我的函数,我需要一些值(其中一些可以在主要版本中初始化一次),我希望避免使用commonsave

我读过我可以使用单例模式,但我不是模板专家,而且有些人批评它的使用。所以, 即使我在函数的参数中没有它,我如何在函数内传递变量?

1 个答案:

答案 0 :(得分:3)

如果你定义了Fortran MODULE,你可以让你的函数使用一些未在主程序中定义的变量:

MODULE mymod
   REAL :: x = 1.35
   INTEGER :: y = 16

 CONTAINS
   FUNCTION results(a,b)
      REAL :: a, results
      INTEGER :: b
      results = a*x+real(b+y)
   END FUNCTION results

END MODULE mymod

PROGRAM extrn_func
   USE mymod, ONLY: results
   PRINT *,results(1.0, 3)
END PROGRAM extrn_func

但是,此方法要求您能够将USE mymod语句添加到主程序中。