Давайте начнем с некоторых определений.
Программы на Фортране состоят из программных модулей.В так называемом Fortran 2008 (текущий стандарт) существует пять типов программных модулей:
- основная программа;
- внешняя подпрограмма;
- модуль;
- субмодуль;
- блок программных данных блока.
Позвольте мне сосредоточить ваше внимание напервые три.
Основная программа
Как стандартная заявка, это
программный блок, который не является подпрограммой, модулем, субмодулем или программой данных блокаед.
Не очень полезное определение.=) Что вы должны знать, так это то, что основной программный модуль начинается с ключевого слова PROGRAM
, это точка входа в приложение, и, очевидно, программа должна состоять ровно из одной основной программы.
Программа также может состоять из любого числа(включая ноль) других видов программных единиц.
Внешняя подпрограмма
Подпрограмма определяет процедуру.Существует два типа процедур и, конечно, два типа подпрограмм для их определения:
- подпрограммы функций для определения функций;
- подпрограммы подпрограмм для определения подпрограмм.
Подпрограмма функции - это подпрограмма, в качестве первого оператора которой используется оператор FUNCTION.Подпрограмма подпрограмма - это подпрограмма, в которой в качестве первого оператора используется оператор SUBROUTINE.
Кроме того, процедуры и подпрограммы различаются по месту своего появления в программе.Вы можете использовать:
- внешние подпрограммы для определения внешних процедур;
- внутренние подпрограммы для определения внутренних процедур;
- подпрограммы модуля для определения процедур модуля.
внешняя подпрограмма
подпрограмма, которая не содержится в основной программе, модуле, субмодуле или другой подпрограмме
внутренняя подпрограмма
подпрограмма, которая содержится в основной программе или другой подпрограмме
подпрограмма модуля
подпрограмма, которая содержится в модуле или подпрограмме, но не является внутренней подпрограммой
Модуль
Это просто контейнер с определениями (определениями типов, процедурами и т. Д.).
Теперь небольшой пример.
main.f90
! Main program unit.
PROGRAM main
USE foo
IMPLICIT NONE
CALL external_bar
CALL internal_bar
CALL module_bar
CONTAINS
! Internal subprogram defines internal procedure.
SUBROUTINE internal_bar
PRINT *, "inside internal procedure"
END SUBROUTINE internal_bar
END PROGRAM main
foo.f90
! Module program unit.
MODULE foo
IMPLICIT NONE
CONTAINS
! Module subprogram defines module procedure.
SUBROUTINE module_bar
PRINT *, "inside module procedure"
END SUBROUTINE module_bar
END MODULE foo
bar.f90
! External subprogram program unit.
! External subprogram defines external procedure.
SUBROUTINE external_bar
PRINT *, "inside external procedure"
END SUBROUTINE external_bar