A small constants module lets related programs share named settings instead of repeating magic numbers.

Program

Play the program to choose an adjustment and combine it with a module constant.

extra
module_constant_use.f90
Replay: real traced execution (multi-file project)
module settings_mod
    implicit none
    integer, parameter :: base_limit = 10
contains
    function adjusted_limit(extra) result(limit)
        integer, intent(in) :: extra
        integer :: limit
        limit = base_limit + extra
    end function adjusted_limit
end module settings_mod

program module_constant_use_demo
    use settings_mod, only: base_limit, adjusted_limit
    implicit none
    integer :: extra
    integer :: limit

    extra = 2
    limit = adjusted_limit(extra)
    print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit
end program module_constant_use_demo
module settings_mod
    implicit none
    integer, parameter :: base_limit = 10
contains
    function adjusted_limit(extra) result(limit)
        integer, intent(in) :: extra
        integer :: limit
        limit = base_limit + extra
    end function adjusted_limit
end module settings_mod

program module_constant_use_demo
    use settings_mod, only: base_limit, adjusted_limit
    implicit none
    integer :: extra
    integer :: limit

    extra = 0
    limit = adjusted_limit(extra)
    print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit
end program module_constant_use_demo
module settings_mod
    implicit none
    integer, parameter :: base_limit = 10
contains
    function adjusted_limit(extra) result(limit)
        integer, intent(in) :: extra
        integer :: limit
        limit = base_limit + extra
    end function adjusted_limit
end module settings_mod

program module_constant_use_demo
    use settings_mod, only: base_limit, adjusted_limit
    implicit none
    integer :: extra
    integer :: limit

    extra = 5
    limit = adjusted_limit(extra)
    print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit
end program module_constant_use_demo
  1. extra ← 2

    18extra = 219limit = adjusted_limit(extra)
    values this step2extra
  2. limit ← 12

    18extra = 219limit = adjusted_limit(extra)20print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit
    values this step12limit10base_limit2extra
  3. print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit

    19    limit = adjusted_limit(extra)20    print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit21end program module_constant_use_demo
    output10 2 12
    values this step10base_limit2extra12limit
  1. extra ← 0

    18extra = 019limit = adjusted_limit(extra)
    values this step0extra
  2. limit ← 10

    18extra = 019limit = adjusted_limit(extra)20print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit
    values this step10limit10base_limit0extra
  3. print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit

    19    limit = adjusted_limit(extra)20    print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit21end program module_constant_use_demo
    output10 0 10
    values this step10base_limit0extra10limit
  1. extra ← 5

    18extra = 519limit = adjusted_limit(extra)
    values this step5extra
  2. limit ← 15

    18extra = 519limit = adjusted_limit(extra)20print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit
    values this step15limit10base_limit5extra
  3. print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit

    19    limit = adjusted_limit(extra)20    print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limit21end program module_constant_use_demo
    output10 5 15
    values this step10base_limit5extra15limit
parameter `integer, parameter :: base_limit = 10` names a shared constant.
shared setting The program imports the constant and the helper that uses it.
single source of truth Changing the module constant would update every caller.