首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公共块和子例程参数

公共块和子例程参数
EN

Stack Overflow用户
提问于 2016-12-02 16:33:52
回答 1查看 414关注 0票数 1

如果我有一个名为var的变量,它位于一个名为myCB的公共块中,那么我可以使用相同的名称在另外两个不使用公共块myCB的子程序之间传递一个参数。

代码如下所示。

代码语言:javascript
复制
Subroutine SR1(Var)
      !something here using Var
end Subroutine SR1

Subroutine SR2()
....
      Call SR1(B)
....
end Subroutine SR2

Subroutine SR3()
common \myCB\ Var
... 
  ! something using the other Var shared with SR4
......
end Subroutine SR3

Subroutine SR4()
common \myCB\ Var
....
... ! something using the other Var shared with SR3
....
end Subroutine SR4

VarSR1SR2之间的传递确实有问题,这个问题是否来自公共块中的另一个名为VarVar

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-02 17:19:58

如果您不想过多地修改遗留代码库,我建议您将common块放在一个module中,并在需要访问时导入变量:

代码语言:javascript
复制
module myCB_mod
    common /myCB/ var, var2, var3
    save ! This is not necessary in Fortran 2008+
end module myCB_mod

subroutine SR2()
    use myCB_mod
    !.......
    call SR1(B)
    !.....
end subroutine SR2

subroutine SR3()
    use myCB_mod
    !.......
end subroutine SR3

subroutine SR4()
    use myCB_mod
    !.....
end subroutine SR4

或者更好的是,我建议您完全避免common块(这需要对遗留代码库进行全面重写),并将所有子程序限制在module中。

代码语言:javascript
复制
module myCB
    implicit none
    real var, var2, var3
    save ! This is not necessary in Fortran 2008+
end module myCB

module mySubs
    use myCB
    implicit none
contains
    subroutine SR2()
            !.......
            call SR1(B)
            !.....
    end subroutine SR2

    subroutine SR3()
            !.......
    end subroutine SR3

    subroutine SR4()
            !.....
    end subroutine SR4
end module

最后,common块中的变量是否需要初始化?如果是这样的话,这将带来更多涉及data语句或block data构造的复杂问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40936915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档