14

如何在 Fortran 中声明私有函数?

4

4 回答 4

27

这仅适用于 Fortran 90 模块。在您的模块声明中,您可以使用“public”和“private”关键字指定变量和例程列表的访问限制。我通常发现最初单独使用 private 关键字很有帮助,它指定模块中的所有内容都是私有的,除非明确标记为 public。

在下面的代码示例中,subroutine_1() 和 function_1() 可以通过必要的“use”语句从模块外部访问,但任何其他变量/子例程/函数都是私有的。

module so_example
  implicit none

  private

  public :: subroutine_1
  public :: function_1

contains

  ! Implementation of subroutines and functions goes here  

end module so_example
于 2008-10-21T15:25:52.510 回答
3

如果使用模块,语法如下:

PUBLIC  :: subname-1, funname-2, ...

PRIVATE :: subname-1, funname-2, ...

PRIVATE 中列出的所有实体都不能从模块外部访问,而 PUBLIC 中列出的所有实体都可以从模块外部访问。默认情况下,可以从模块外部访问所有其他实体。

MODULE  Field
  IMPLICIT   NONE

  Integer :: Dimen

  PUBLIC  :: Gravity
  PRIVATE :: Electric, Magnetic

CONTAINS

  INTEGER FUNCTION  Gravity()
    ..........
  END FUNCTION Gravity


  REAL FUNCTION  Electric()
    ..........
  END FUNCTION


  REAL FUNCTION  Magnetic()
    ..........
  END FUNCTION

  ..........

END MODULE  Field
于 2015-06-18T22:03:15.350 回答
2

我从来没有写过 FORTRAN 的一行,但是这个关于“私有模块过程”的主题似乎很热门,至少我希望如此。至少似乎包含答案。


贾雷多总结:

public/private 属性存在于 Fortran 90 及更高版本的模块中。Fortran 77 及更早版本——你运气不好。

于 2008-10-21T08:40:18.270 回答
1
Private xxx, yyy, zzz

real function xxx (v)
  ...
end function xxx

integer function yyy()
  ...
end function yyy

subroutine zzz ( a,b,c )
  ...
end subroutine zzz

... 
other stuff that calls them
...
于 2008-10-21T14:07:14.680 回答