You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:56:02