Fortran 中的私有函数

发布于 2024-07-07 19:14:46 字数 27 浏览 6 评论 0原文

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

How do I declare a private function in Fortran?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

久隐师 2024-07-14 19:14:46

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

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

module so_example
  implicit none

  private

  public :: subroutine_1
  public :: function_1

contains

  ! Implementation of subroutines and functions goes here  

end module so_example

This will only work with a Fortran 90 module. In your module declaration, you can specify the access limits for a list of variables and routines using the "public" and "private" keywords. I usually find it helpful to use the private keyword by itself initially, which specifies that everything within the module is private unless explicitly marked public.

In the code sample below, subroutine_1() and function_1() are accessible from outside the module via the requisite "use" statement, but any other variable/subroutine/function will be private.

module so_example
  implicit none

  private

  public :: subroutine_1
  public :: function_1

contains

  ! Implementation of subroutines and functions goes here  

end module so_example
ㄖ落Θ余辉 2024-07-14 19:14:46

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

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

If you use modules, here is the syntax:

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

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

All entities listed in PRIVATE will not be accessible from outside of the module and all entities listed in PUBLIC can be accessed from outside of the module. All the others entities, by default, can be accessed from outside of the module.

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
江湖彼岸 2024-07-14 19:14:46

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


jaredor 摘要:

公共/私有属性存在于 Fortran 90 及更高版本的模块中。 Fortran 77 及更早版本 - 你运气不好。

I've never written a line of FORTRAN, but this thread about "Private module procedures" seems to be topical, at least I hope so. Seems to contain answers, at least.


jaredor summary:

The public/private attribute exists within modules in Fortran 90 and later. Fortran 77 and earlier--you're out of luck.

下雨或天晴 2024-07-14 19:14:46
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
...
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
...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文