在SUBROUTINE中使用module2,它包含在module1或module1本身中?

时间:2016-04-07 15:25:37

标签: module nested fortran contains subroutine

以下

之类的模块之间是否存在显着差异
MODULE module1
   USE module2
   IMPLICIT NONE
       :
CONTAINS

   SUBROUTINE subroutine1
      IMPLICIT NONE
          :
   END SUBROUTINE subroutine1

   SUBROUTINE subroutine2
      IMPLICIT NONE
          :
   END SUBROUTINE subroutine2

END MODULE module1

和另一个如下

MODULE module1
   IMPLICIT NONE
       :
CONTAINS

   SUBROUTINE subroutine1
      USE module2
      IMPLICIT NONE
          :
   END SUBROUTINE subroutine1

   SUBROUTINE subroutine2
      IMPLICIT NONE
          :
   END SUBROUTINE subroutine2

END MODULE module1

除了在第一种情况下两个子程序都看到模块2?

1 个答案:

答案 0 :(得分:3)

可能很重要且应该注意的差异在于

MODULE module1
   USE module2

module1默认情况下也会导出module2的所有公共符号。只在子例程中使用module2时才会发生这种情况,因为模块没有看到它。

所以:

  module module2
    integer int
  end module

  module module1
    use module2
  end module

    use module1
    print *, int
  end

是可能的,但是

  module module2
    integer int
  end module

  module module1
  contains
    subroutine s
      use module2
    end subroutine
  end module

    use module1
    print *, int
  end

不是。

当然,only子句以及privatepublic语句可以更精细地控制此行为。