gpt4 book ai didi

fortran - 什么是子模块以及它们是如何使用的?

转载 作者:行者123 更新时间:2023-12-04 11:24:42 26 4
gpt4 key购买 nike

我不太了解子模块的目的。我知道大多数编译器对它们的支持很少,但这个概念很有趣。我想我理解了基本概念,但我看到的所有示例(Fortran Wiki、Modern Fortran Explained、技术报告)都很简单,使用完全相同的示例(point 在同一个文件中输入)并且不要在调用函数时显示它们的实际用途。在什么情况下你想使用子模块?当你想使用一个子模块时,你是否包含一个 use 语句?如果有人可以提供一个例子,我真的很想。

最佳答案

简单的答案是,当您希望父模块或子模块中的代码更少时,您将代码放入子模块中。

您可能希望在父模块或子模块中拥有更少的源代码,因为父模块的源代码太长了。

在子模块之前,唯一可以做到这一点的方法是将源代码移出模块到不同的模块或外部过程中。但是,如果要移动的源代码引用了保留在原始模块中的私有(private)事物或组件,这并不总是可能的。子模块可以通过主机关联访问在其父模块或子模块中声明的事物 - 源代码仍然可以访问 PRIVATE 事物,就像它仍然是父物理源代码的一部分时一样。

如果与您的处理器相关,您可能还希望将源代码从父模块中拆分出来以避免编译级联。对模块的更改通常需要重新编译该模块(及其后代),然后重新编译使用该模块(及其后代)的所有程序单元,重复级联以进一步重新编译,其中任何重新编译的程序单元本身就是模块。对子模块的更改通常只需要重新编译该子模块及其任何后代子模块。

子模块的分层性质也可能适合分层代码排列 - 您不希望层次结构的同一级别的 sibling 能够直接访问它们定义的实体和过程。

USE 语句仅用于您想要访问模块提供的范围内的事物的情况。您不能在 USE 语句中“使用”子模块(尽管在模块中定义其 INTERFACE 的过程可能在子模块中定义其主体)。

模块的子模块不使用父模块(它不能 - 这有点像模块试图使用自身)并且它不需要 - 它已经可以通过主机关联访问模块中的内容。启动子模块程序单元的子模块语句标识它扩展的模块(可能还有另一个子模块)。模块的源代码中没有任何内容可以告诉它有多少子模块可以扩展它。

关于fortran - 什么是子模块以及它们是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22825841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com