Fortran Coder

查看: 2269|回复: 8
打印 上一主题 下一主题

[Module] module及subroutine中声明的优先级

[复制链接]

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

楼主
发表于 2023-3-15 22:45:51 | 显示全部楼层
这个涉及变量定义的域(scope)。一般module定义的变量具有全局域,程序单元use 该module, 就可调用module中定义的变量(除非是private, 那就不能调用)。subroutine中定义的变量具有局部域,只能在该subroutine中调用。
在你的subroutine中, iboxNears具有type(near)的结构, 不具有type(subblocks)的结构.
如果在subroutine中使用use module,编译会出错, 因为数组iboxNears与简单变量iboxNears同名。不过可以另取局部数组名替代,如下:
[Fortran] 纯文本查看 复制代码
subroutine
use module, new_iboxNears => iboxNears
type(near) :: iboxNears
end subroutine

评分

参与人数 1F 币 +1 收起 理由
fcode + 1

查看全部评分

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

沙发
发表于 2023-3-17 00:26:01 | 显示全部楼层
本帖最后由 风平老涡 于 2023-3-17 00:27 编辑
caimaxwell 发表于 2023-3-16 17:28
[mw_shl_code=fortran,true]module EmiblockData
  use EmHMatrixData
  implicit none

请具体了解下use的结构和用法, 参考教科书。

use module, rename-list

这里的rename有以下型式

local_id => use_id

这里的local_id指的是当前程序单元使用的名字, use_id指的是在module中定义的名字。
所以,use_id在module中已经被定义了。local_id只是该use_id在当前程序单元中的替代名,在当前程序单元中无需重新定义。

"=>"在这里只是表示替代的意思,和指针无关。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 21:08

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表