【问题标题】:Using contains, interface, module, or separate subroutines? [duplicate]使用包含、接口、模块或单独的子例程? [复制]
【发布时间】:2016-09-30 19:29:20
【问题描述】:

我已经用 Fortran 编写了一些代码,但对如何构建更长的代码并没有真正的信心。

我经常想要assumed-shape arrays。这在使用interface blockmodulecontains 语句时似乎是可能的。然而,在主代码之外有子例程,不使用这些方法中的任何一种在许多情况下都有效,但不适用于assumed-shape arrays

在什么情况下首选这些方法,主要区别是什么?

每种方法中的变量以何种方式共享/继承?

【问题讨论】:

  • 您的最后一点是一个单独的问题,请在其他地方询问。但是先搜索一下,这里还有其他问题。
  • 我删除了最后一个问题。是的,“重复”中的答案很有帮助!但是我没有找到我使用的关键字。
  • 一定程度的重复是好的,因为它可以帮助人们在不同措辞的问题中找到答案,所以不用担心。关键是在这里复制另一个问题的答案是没有意义的。
  • 尝试在您的帖子中提出一个问题(请参阅too broad 结束语)。继承也可能是一个单独的问题。在访问变量时,它发生在 主机关联 中。 contains 部分中的任何内容都可以访问主机的变量。模块过程可以访问模块变量,内部过程可以访问宿主程序或宿主过程。

标签: fortran fortran90 gfortran f2py


【解决方案1】:

接口块是额外的工作。您必须编写程序块并在程序更改时对其进行修改。接口块对于使用 ISO C 绑定工具调用 C 语言例程等目的很有用。

在主程序的“包含”下有一个子程序的缺点是所有的局部变量都是继承的。我认为这对程序更加孤立更好。

模块使程序更加独立,变量的访问更加清晰——除非你过度使用模块变量。此外,它更容易在其他程序中重用模块中的过程。

【讨论】:

  • 所以contains 语句之后的子程序不会相互继承变量?而且我可以安全地在同一contains 块中的子例程中使用重叠的变量名集,无论它是在主代码中还是在模块中?或者被调用者是否继承自调用子程序?
  • 如果您必须回答与答案中基本相同的单词,则表明它可能是重复的。
猜你喜欢
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
相关资源
最近更新 更多