将数字从一个模块传输到另一个模块

时间:2017-07-07 11:01:42

标签: module fortran circular-dependency

我有2个模块:A和B.A使用B.A读取两个数字,然后调用B中需要这些数字的子程序。如何在A中读入这两个数字,在B中的子程序中可用,而不必将它们添加到子程序的调用中?

1 个答案:

答案 0 :(得分:1)

我知道有两种可能性:

  1. 将他们添加到通话中。
  2. 将这两个数字移至第三个模块C,并在AB中使用这些数字。
  3. 你说你不想要选项1但是,选项2可能对你没用。

    (未经测试的)示例是

    module A
     contains
        subroutine readNumbers()
            use C, only: a1, a2
            use B, only: theFinalRoutine
            !code to set a1 and a2
            call theFinalRoutine
        end subroutine readNumbers
     end module A
    
    module B
     contains
        subroutine theFinalRoutine()
            use C, only: a1, a2
            !do some things with a1 and a2
        end subroutine theFinalRoutine
     end module B
    
    module C
       real :: a1, a2
    end module C
    
    program test
       use A, only: readNumbers
       call readNumbers()
    end program test
    

    这并不总是一个好主意,但它确实有助于避免数据情况下的循环依赖(而不是例程之间的依赖关系)。