Рекомендуемым способом сделать это в современном Fortran было бы создание модуля, назовем его, например. "MyMath". В этом случае, вы можете создать один файл mymath.f90
, содержащий что-то вроде этого:
module mymath
contains
function myfunction(x) result(r)
real, intent(in) :: x
real :: r
r = sin(x)
end function
end module
Тогда другой файл main.f90
так:
program main
use :: mymath
print *,myfunction(3.1416/2)
end program
Тогда вы просто компилировать исходные файлы вместе:
gfortran mymath.f90 main.f90
Результирующий исполняемый файл должен работать должным образом.
EDIT:
Если вы действительно предпочитают держаться подальше от модулей, то вы можете сделать mymath.f
так:
function myfunction(x) result(r)
real, intent(in) :: x
real :: r
r = sin(x)
end function
И сделать main.f90
так:
program main
real, external :: myfunction
print *,myfunction(3.1416/2)
end program
Он компилируется и работает как другое решение. Обратите внимание, что если вы решите использовать external
вместо module
, компилятор обычно не проверяет, что аргументы, которые вы даете myfunction
, имеют правильное количество, типы и размеры, что может осложнить отладку в будущем.
Спасибо, я подожду, если кто-то укажет прямолинейный способ вызова функции без среды модуля. –
Хотя, возможно, хорошая практика, «внешний» здесь не требуется. – francescalus