Учитывая простую программу, которая работает просто отлично, например:
program test
implicit none
real, allocatable :: x(:)
real :: su, si
allocate(x(3))
x(:) = (/1,2,3/)
su=sum(x(:))
si=size(x(:))
end program
Я пытался преобразовать ее во внешний модуль с подпрограммой:
module test
implicit none
real, allocatable, intent(in) :: x(:)
real, intent(out) :: su, si
contains
subroutine sumsize(x(:),su,si)
su=sum(x(:))
si=size(x(:))
end subroutine
end module
Однако я не могу получитьон скомпилирован с несколькими сообщениями об ошибках, большинство из которых, на мой взгляд, основаны на x(:)
, su
и si
, которые не являются DUMMY
переменными.
Где и как определяются макеты? Кажется, что это простая формальная ошибка.
Другая ошибка сообщает о нежелательной памяти в заголовке подпрограммы и исчезает при ее определении с помощью subroutine sumsize(x,su,si)
. Почему вход для подпрограммы не может быть вектором?
Компиляция с gfortran - gcc v. 8.3.0-6 (Debian)
через gfortran -ffree-form -c module_test.f -o test.o
.