Multi-File Program Structure
Module Constant Use
Shared Settings
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.
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
extra ← 2
18extra = 219limit = adjusted_limit(extra)values this step2extralimit ← 12
18extra = 219limit = adjusted_limit(extra)20print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limitvalues this step12limit10base_limit2extraprint '(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_demooutput10 2 12values this step10base_limit2extra12limit
extra ← 0
18extra = 019limit = adjusted_limit(extra)values this step0extralimit ← 10
18extra = 019limit = adjusted_limit(extra)20print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limitvalues this step10limit10base_limit0extraprint '(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_demooutput10 0 10values this step10base_limit0extra10limit
extra ← 5
18extra = 519limit = adjusted_limit(extra)values this step5extralimit ← 15
18extra = 519limit = adjusted_limit(extra)20print '(I0, 1X, I0, 1X, I0)', base_limit, extra, limitvalues this step15limit10base_limit5extraprint '(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_demooutput10 5 15values 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.