Fortran Coder

查看: 12592|回复: 3
打印 上一主题 下一主题

[Module] 如何确定被定义的变量属于哪个module

[复制链接]

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
跳转到指定楼层
楼主
发表于 2015-9-4 09:50:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
昨天发了个求助帖,不知道怎么了反正今天找不到了,什么提示都没有。不知道是网络问题还是哪些地方违规了被删除了。如果是后者,还请斑竹指出我哪里违规了,避免下次再犯。
关于我的问题是这样的。我在用VS2008,要把两个数值模型结合成一个。由于两个模型中有重复的变量,我正在处理如何统一这些变量的问题。在这一过程中,我发现了一个很奇怪的现象。用简单的言语描述就是:
用module A定义了一个变量n,在module B中引用了module A, 然后再在子程序C中用了module B,然后设定了implicit none,后来发现在没有定义x的情况下,竟然通过了编译。如果屏蔽子程序CC中的module B,则报错提示未对x定义。
为了方便阅读,我用等效的一段代码来描述我的问题。
[Fortran] 纯文本查看 复制代码
module A
  integer::n
end module A

module B
  use A
  implicit none
  real,allocatable::y(:)
  contains
    subroutine Kk
      n=3
      allocate(y(n))
    end subroutine kk
end module B

program xx
  use B
  implicit none
  call kk
  call cc
  pause
end program
  
subroutine cc
  use B
  implicit none
  integer::I
  do I=1,N
    write(*,*)I,N
    pause
  enddo
end subroutine  
    
 

运行的结果是 能正确显示N=3

也就是在Fortran中说如果一个模块A引用了模块B(模块A中使用 use B),那么在用模块A的时候,也能用模块B中的变量么?




分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
沙发
 楼主| 发表于 2015-9-4 12:19:44 | 显示全部楼层
fcode 发表于 2015-9-4 10:41
昨天可能服务器出了点问题,我们丢失了昨天的几个帖子。并无违规。

是的,模块可以继承。所以主程序和 CC  ...

谢谢指点。

原来如此.

用type感觉确实条理清晰了,可是对于一个不系统的变量用type感觉有点麻烦。

请问有没有方法来拒绝这一继承呢?感觉这样的话好危险,尤其是在修改别人的程序的时候。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-23 19:16

Powered by Tencent X3.4

© 2013-2024 Tencent

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