Fortran Using modules from other program units


Example

To access entities declared in a module from another program unit (module, procedure or program), the module must be used with the use statement.

module shared_data
  implicit none

  integer :: iarray(4) = [1, 2, 3, 4]
  real :: rarray(4) = [1., 2., 3., 4.]
end module


program test

  !use statements most come before implicit none
  use shared_data

  implicit none

  print *, iarray
  print *, rarray
end program

The use statement supports importing only selected names

program test

  !only iarray is accessible
  use shared_data, only: iarray

  implicit none

  print *, iarray
  
end program

Entities can be also accessed under different name by using a rename-list:

program test

  !only iarray is locally renamed to local_name, rarray is still acessible
  use shared_data, local_name => iarray

  implicit none

  print *, local_name

  print *, rarray
  
end program

Further, renaming can be combined with the only option

program test
  use shared_data, only : local_name => iarray
end program

so that only the module entity iarray is accessed, but it has the local name local_name.

If selected for importing names mark as private you can not import them to your program.