能否在Fortran中封装模块常量以用于USE: ONLY语句?
Fortran模块按需引入常量的实现方法(兼容gfortran)
不用把MAXSIZE、FIELDSIZE这两个常量单独拆到独立模块里,Fortran原生的USE ... ONLY:语法就能直接实现只引入指定常量,完全忽略模块内的其他子程序、函数,gfortran完全支持这个写法。
示例模块代码
MODULE QBtools IMPLICIT NONE ! 定义需要导出的常量 INTEGER, PARAMETER :: MAXSIZE = 1024 INTEGER, PARAMETER :: FIELDSIZE = 64 ! 模块内的其他子程序和函数(不会被自动引入) CONTAINS SUBROUTINE some_subroutine() PRINT *, "这是QBtools模块里的子程序" END SUBROUTINE some_subroutine FUNCTION some_function(x) RESULT(res) INTEGER, INTENT(IN) :: x INTEGER :: res res = x * 2 END FUNCTION some_function END MODULE QBtools
按需引入常量的调用代码
PROGRAM test_constants ! 仅引入QBtools模块中的MAXSIZE和FIELDSIZE两个常量 USE QBtools, ONLY: MAXSIZE, FIELDSIZE IMPLICIT NONE PRINT *, "MAXSIZE = ", MAXSIZE PRINT *, "FIELDSIZE = ", FIELDSIZE ! 这里如果调用some_subroutine会编译报错,因为没通过ONLY引入 END PROGRAM test_constants
关键说明
ONLY:后面直接列出需要引入的常量名即可,模块内的其他程序单元不会进入当前代码的作用域- 如果之后需要引入模块里的其他子程序或函数,只需要在
ONLY:后面追加对应的名字,比如USE QBtools, ONLY: MAXSIZE, FIELDSIZE, some_subroutine - gfortran对这个语法的支持完全没问题,不需要额外的编译参数
内容的提问来源于stack exchange,提问作者kris44dad
相关产品推荐
相关产品推荐

