常用块和子例程参数

时间:2016-12-02 16:33:53

标签: variables fortran subroutine fortran-common-block

如果我有一个名为var的变量,它位于名为myCB的公共块中,我可以使用相同的名称在不使用公共块{{1}的其他两个子例程之间传递参数}}?

代码如下所示。

myCB

我在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 Var之间传递SR1时遇到问题,问题可能来自公共区块中另一个名为SR2的问题吗?

1 个答案:

答案 0 :(得分:2)

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

module

或者更好的是,我建议您完全避免使用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

最后,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构造的更复杂的问题。