目前我正在学习 Fortran。我遇到过程序
submodule (points) points_a
contains
module procedure point_dist
distance = sqrt((a%x - b%x)**2 + (a%y - b%y)**2)
end procedure point_dist
end submodule points_a
Run Code Online (Sandbox Code Playgroud)
我不确定是否可以在模块过程块内使用 import 语句?谁能分享一个示例程序吗?
当涉及到 IMPORT 语句时,你必须问自己一个问题:我使用的是 Fortran 2008 还是 Fortran 2018?Fortran 2018 显着扩展了此声明。
在 Fortran 2008 中,IMPORT 语句使得在接口主体外部定义的实体(来自主机作用域单元)可用。在问题示例中,没有接口主体,因此不允许使用 Fortran 2008 IMPORT 语句。
IMPORT 语句的 Fortran 2008 形式是编译器和工具最常支持的形式。
Fortran 2018 允许 IMPORT 语句更全面地控制主机关联。我们的声明看起来像
import
import host_entity
Run Code Online (Sandbox Code Playgroud)
与 Fortran 2008 中的相同。但我们也有
import, only : host_entity
import, none
import, all
Run Code Online (Sandbox Code Playgroud)
通过这些语句,我们可以说明哪些实体在范围块内与主机关联。 import, only : ...给出可用主机实体的列表. import, none表示无法通过主机关联访问主机中的任何实体(但可以通过其他方式);import, all这使得所有主机实体可以通过主机关联进行访问(并且这些实体不能在本地“隐藏”)。
Fortran 2018 IMPORT 语句可在任何具有主机作用域单元的作用域单元中使用。(这包括子模块内的模块过程,如问题中所示。)
目前,您可能会看到编译器/工具告诉您 IMPORT 只能出现在接口体中。同样,这取决于语言级别的支持。